From: Maxim Mamontov Date: Thu, 22 Dec 2016 19:46:27 +0000 (+0200) Subject: Merge branch 'stg-2.409' into stg-2.409-radius X-Git-Url: https://git.stg.codes/stg.git/commitdiff_plain/e39f173d25ae650ee843e3d1c311abe9c1cb5ee9?hp=-c Merge branch 'stg-2.409' into stg-2.409-radius --- e39f173d25ae650ee843e3d1c311abe9c1cb5ee9 diff --combined stglibs/common.lib/common.cpp index b527ac58,fc7c35ce..7bf27397 --- a/stglibs/common.lib/common.cpp +++ b/stglibs/common.lib/common.cpp @@@ -32,8 -32,7 +32,8 @@@ // Like FreeBSD4 #include #include -#include +#include +#include #include @@@ -734,6 -733,38 +734,38 @@@ void SwapBytes(int64_t & value value = temp; } //--------------------------------------------------------------------------- + std::string formatTime(time_t ts) + { + char buf[32]; + struct tm brokenTime; + + brokenTime.tm_wday = 0; + brokenTime.tm_yday = 0; + brokenTime.tm_isdst = 0; + + gmtime_r(&ts, &brokenTime); + + strftime(buf, 32, "%Y-%m-%d %H:%M:%S", &brokenTime); + + return buf; + } + //--------------------------------------------------------------------------- + time_t readTime(const std::string & ts) + { + if (ts == "0000-00-00 00:00:00") + return 0; + + struct tm brokenTime; + + brokenTime.tm_wday = 0; + brokenTime.tm_yday = 0; + brokenTime.tm_isdst = 0; + + stg_strptime(ts.c_str(), "%Y-%m-%d %H:%M:%S", &brokenTime); + + return stg_timegm(&brokenTime); + } + //--------------------------------------------------------------------------- int str2x(const std::string & str, int32_t & x) { x = static_cast(strtol(str.c_str(), NULL, 10)); @@@ -1080,37 -1111,3 +1112,37 @@@ std::string ToPrintable(const std::stri return dest; } + +uid_t str2uid(const std::string& name) +{ + const passwd* res = getpwnam(name.c_str()); + if (res == NULL) + return -1; + return res->pw_uid; +} + +gid_t str2gid(const std::string& name) +{ + const group* res = getgrnam(name.c_str()); + if (res == NULL) + return -1; + return res->gr_gid; +} + +mode_t str2mode(const std::string& name) +{ + if (name.length() < 3 || name.length() > 4) + return -1; + + if (name.length() == 4 && name[0] != '0') + return -1; + + mode_t res = 0; + for (size_t i = 0; i < name.length(); ++i) + { + if (name[i] > '7' || name[i] < '0') + return -1; + res = (res << 3) + (name[i] - '0'); + } + return res; +} diff --combined stglibs/common.lib/include/stg/common.h index a20c3d9f,8e82d2a8..d404e013 --- a/stglibs/common.lib/include/stg/common.h +++ b/stglibs/common.lib/include/stg/common.h @@@ -27,15 -27,17 +27,16 @@@ #ifndef common_h #define common_h -#ifdef __BORLANDC__ -#include -#else -#include -#include // NAME_MAX -#endif +#include "stg/os_int.h" +#include "stg/const.h" + #include #include +#include ++#include // NAME_MAX -#include "stg/os_int.h" -#include "stg/const.h" +#include // uid_t, gid_t +#include // mode_t #define STAT_TIME_3 (1) #define STAT_TIME_2 (2) @@@ -148,6 -150,8 +149,8 @@@ bool WriteAll(int sd, const void * sour std::string ToPrintable(const std::string & src); + std::string formatTime(time_t value); + time_t readTime(const std::string & value); //----------------------------------------------------------------------------- int str2x(const std::string & str, int32_t & x); int str2x(const std::string & str, uint32_t & x); @@@ -299,8 -303,4 +302,8 @@@ const std::string & unsigned2str(varT x char * stg_strptime(const char *, const char *, struct tm *); time_t stg_timegm(struct tm *); +uid_t str2uid(const std::string& name); +gid_t str2gid(const std::string& name); +mode_t str2mode(const std::string& mode); + #endif