22#include < error.hpp>
33#include < rpcclient.hpp>
44
5- #include < spdlog/sinks/basic_file_sink .h>
5+ #include < spdlog/sinks/rotating_file_sink .h>
66#include < spdlog/sinks/stdout_color_sinks.h>
77#include < spdlog/spdlog.h>
88
@@ -23,12 +23,14 @@ static auto initLogger() {
2323#if DEBUG
2424 auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
2525#endif
26- auto basic_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>(" /var/log/gitlabnss-client.log" );
26+ // auto filesink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("/var/log/gitlabnss-client.log");
27+ auto filesink =
28+ std::make_shared<spdlog::sinks::rotating_file_sink_mt>(" /var/log/gitlabnss.log" , 5 * 1024 * 1024 , 3 );
2729 std::vector<spdlog::sink_ptr> sinks{
2830#if DEBUG
2931 console_sink,
3032#endif
31- basic_sink
33+ filesink
3234 };
3335 auto logger = std::make_shared<spdlog::logger>(" " , sinks.begin (), sinks.end ());
3436 logger->set_level (spdlog::level::trace);
@@ -92,15 +94,18 @@ nss_status _nss_gitlab_getpwuid_r(uid_t uid, passwd* pwd, char* buf, size_t bufl
9294 auto promise = request.send ().wait (waitScope);
9395
9496 auto user = promise.getUser ();
95- switch ( static_cast <Error>(promise.getErrcode ())) {
96- case Error::Ok:
97+ auto err = static_cast <Error>(promise.getErrcode ());
98+ if (err == Error::Ok && std::string ( " active " ) == user. getState (). cStr ()) {
9799 populatePasswd (*pwd, user, {buf, buflen});
98100 SPDLOG_LOGGER_DEBUG (logger, " Found!" );
99101 return nss_status::NSS_STATUS_SUCCESS;
100- case Error::NotFound:
102+ } else if (err == Error::Ok) {
103+ SPDLOG_LOGGER_DEBUG (logger, " User is not active (status: {})" , user.getState ().cStr ());
104+ return nss_status::NSS_STATUS_NOTFOUND;
105+ } else if (err == Error::NotFound) {
101106 SPDLOG_LOGGER_DEBUG (logger, " Not Found" );
102107 return nss_status::NSS_STATUS_NOTFOUND;
103- default :
108+ } else {
104109 SPDLOG_LOGGER_ERROR (logger, " Other Error" );
105110 SPDLOG_LOGGER_ERROR (logger, " Error {}" , promise.getErrcode ());
106111 return nss_status::NSS_STATUS_UNAVAIL;
@@ -121,15 +126,18 @@ nss_status _nss_gitlab_getpwnam_r(const char* name, passwd* pwd, char* buf, size
121126 auto promise = request.send ().wait (waitScope);
122127
123128 auto user = promise.getUser ();
124- switch ( static_cast <Error>(promise.getErrcode ())) {
125- case Error::Ok:
129+ auto err = static_cast <Error>(promise.getErrcode ());
130+ if (err == Error::Ok && std::string ( " active " ) == user. getState (). cStr ()) {
126131 populatePasswd (*pwd, user, {buf, buflen});
127132 SPDLOG_LOGGER_DEBUG (logger, " Found!" );
128133 return nss_status::NSS_STATUS_SUCCESS;
129- case Error::NotFound:
134+ } else if (err == Error::Ok) {
135+ SPDLOG_LOGGER_DEBUG (logger, " User is not active (status: {})" , user.getState ().cStr ());
136+ return nss_status::NSS_STATUS_NOTFOUND;
137+ } else if (err == Error::NotFound) {
130138 SPDLOG_LOGGER_DEBUG (logger, " Not Found" );
131139 return nss_status::NSS_STATUS_NOTFOUND;
132- default :
140+ } else {
133141 SPDLOG_LOGGER_ERROR (logger, " Other Error" );
134142 SPDLOG_LOGGER_ERROR (logger, " Error {}" , promise.getErrcode ());
135143 return nss_status::NSS_STATUS_UNAVAIL;
@@ -241,8 +249,8 @@ nss_status _nss_gitlab_initgroups_dyn(
241249 auto promise = request.send ().wait (waitScope);
242250
243251 auto user = promise.getUser ();
244- switch ( static_cast <Error>(promise.getErrcode ())) {
245- case Error::Ok:
252+ auto err = static_cast <Error>(promise.getErrcode ());
253+ if (err == Error::Ok && std::string ( " active " ) == user. getState (). cStr ()) {
246254 if (limit < 0 || limit > user.getGroups ().size ())
247255 limit = user.getGroups ().size ();
248256 // Check if groups is large enough, otherwise extend it
@@ -261,10 +269,13 @@ nss_status _nss_gitlab_initgroups_dyn(
261269 }
262270 SPDLOG_LOGGER_DEBUG (logger, " Found!" );
263271 return nss_status::NSS_STATUS_SUCCESS;
264- case Error::NotFound:
272+ } else if (err == Error::Ok) {
273+ SPDLOG_LOGGER_DEBUG (logger, " User is not active (status: {})" , user.getState ().cStr ());
274+ return nss_status::NSS_STATUS_NOTFOUND;
275+ } else if (err == Error::NotFound) {
265276 SPDLOG_LOGGER_DEBUG (logger, " Not Found" );
266277 return nss_status::NSS_STATUS_NOTFOUND;
267- default :
278+ } else {
268279 SPDLOG_LOGGER_ERROR (logger, " Other Error" );
269280 SPDLOG_LOGGER_ERROR (logger, " Error {}" , promise.getErrcode ());
270281 return nss_status::NSS_STATUS_UNAVAIL;
0 commit comments