Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package google-guest-oslogin for openSUSE:Factory checked in at 2021-05-12 19:32:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/google-guest-oslogin (Old) and /work/SRC/openSUSE:Factory/.google-guest-oslogin.new.2988 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "google-guest-oslogin" Wed May 12 19:32:53 2021 rev:7 rq:892550 version:20210429.00 Changes: -------- --- /work/SRC/openSUSE:Factory/google-guest-oslogin/google-guest-oslogin.changes 2021-04-01 14:19:20.332158077 +0200 +++ /work/SRC/openSUSE:Factory/.google-guest-oslogin.new.2988/google-guest-oslogin.changes 2021-05-12 19:33:35.498711782 +0200 @@ -1,0 +2,11 @@ +Tue May 11 08:22:46 UTC 2021 - John Paul Adrian Glaubitz <adrian.glaub...@suse.com> + +- Update to version 20210429.00 (bsc#1185848, bsc#1185849) + * correct pagetoken in groupsforuser (#59) + * resolve self groups last (#58) + * support empty groups (#57) + * no paginating to find groups (#56) + * clear users vector (#55) + * correct usage of pagetoken (#54) + +------------------------------------------------------------------- Old: ---- google-guest-oslogin-20210316.00.tar.gz New: ---- google-guest-oslogin-20210429.00.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ google-guest-oslogin.spec ++++++ --- /var/tmp/diff_new_pack.3sOx7G/_old 2021-05-12 19:33:35.938710025 +0200 +++ /var/tmp/diff_new_pack.3sOx7G/_new 2021-05-12 19:33:35.942710009 +0200 @@ -17,7 +17,7 @@ Name: google-guest-oslogin -Version: 20210316.00 +Version: 20210429.00 Release: 0 Summary: Google Cloud Guest OS Login License: Apache-2.0 ++++++ google-guest-oslogin-20210316.00.tar.gz -> google-guest-oslogin-20210429.00.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-oslogin-20210316.00/src/cache_refresh/cache_refresh.cc new/guest-oslogin-20210429.00/src/cache_refresh/cache_refresh.cc --- old/guest-oslogin-20210316.00/src/cache_refresh/cache_refresh.cc 2021-01-22 01:05:26.000000000 +0100 +++ new/guest-oslogin-20210429.00/src/cache_refresh/cache_refresh.cc 2021-04-29 20:18:30.000000000 +0200 @@ -148,16 +148,19 @@ continue; } std::string name(grp.gr_name); + users.clear(); if (!GetUsersForGroup(name, &users, &error_code)) { syslog(LOG_ERR, "Error getting users for group %s (error_code %d), skipping.", grp.gr_name, error_code); continue; } - cache_file << grp.gr_name << ":" << grp.gr_passwd << ":" << grp.gr_gid << ":" << users.front(); - users.erase(users.begin()); + cache_file << grp.gr_name << ":" << grp.gr_passwd << ":" << grp.gr_gid << ":"; for (int i = 0; i < (int)users.size(); i++) { - cache_file << "," << users[i]; + if (i > 0) { + cache_file << ","; + } + cache_file << users[i]; } cache_file << "\n"; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-oslogin-20210316.00/src/include/oslogin_utils.h new/guest-oslogin-20210429.00/src/include/oslogin_utils.h --- old/guest-oslogin-20210316.00/src/include/oslogin_utils.h 2021-01-22 01:05:26.000000000 +0100 +++ new/guest-oslogin-20210429.00/src/include/oslogin_utils.h 2021-04-29 20:18:30.000000000 +0200 @@ -26,9 +26,9 @@ #define INTERNAL_TWO_FACTOR "INTERNAL_TWO_FACTOR" #define IDV_PREREGISTERED_PHONE "IDV_PREREGISTERED_PHONE" #define SECURITY_KEY_OTP "SECURITY_KEY_OTP" - #define INITGROUP_CACHE_EXPIRE_SECONDS 500 + #ifdef DEBUG #undef DEBUG #define DEBUG(fmt, ...) \ @@ -225,9 +225,11 @@ bool AddUsersToGroup(std::vector<string> users, struct group* result, BufferManager* buf, int* errnop); -// Iterates through all groups until one matching provided group is found, -// replacing gr_name with a buffermanager provided string. -bool FindGroup(struct group* grp, BufferManager* buf, int* errnop); +// Gets group matching name. +bool GetGroupByName(string name, struct group* grp, BufferManager* buf, int* errnop); + +// Gets group matching GID. +bool GetGroupByGID(int gid, struct group* grp, BufferManager* buf, int* errnop); // Iterates through all users for a group, storing results in a provided string vector. bool GetUsersForGroup(string groupname, std::vector<string>* users, int* errnop); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-oslogin-20210316.00/src/nss/nss_oslogin.cc new/guest-oslogin-20210429.00/src/nss/nss_oslogin.cc --- old/guest-oslogin-20210316.00/src/nss/nss_oslogin.cc 2021-01-22 01:05:26.000000000 +0100 +++ new/guest-oslogin-20210429.00/src/nss/nss_oslogin.cc 2021-04-29 20:18:30.000000000 +0200 @@ -31,11 +31,14 @@ #include <sstream> #include <string> +#define MAXBUFSIZE 32768 + using std::string; using oslogin_utils::AddUsersToGroup; using oslogin_utils::BufferManager; -using oslogin_utils::FindGroup; +using oslogin_utils::GetGroupByName; +using oslogin_utils::GetGroupByGID; using oslogin_utils::GetGroupsForUser; using oslogin_utils::GetUsersForGroup; using oslogin_utils::Group; @@ -98,30 +101,40 @@ return NSS_STATUS_SUCCESS; } -enum nss_status _nss_oslogin_getgrby(struct group *grp, char *buf, - size_t buflen, int *errnop) { - // If there is no cache file, we will assume there are no groups. - if (access(OSLOGIN_GROUP_CACHE_PATH, R_OK) != 0) - return NSS_STATUS_NOTFOUND; +// Look for OS Login user with uid matching the requested gid, and craft a +// self-group for it. +enum nss_status getselfgrgid(gid_t gid, struct group *grp, + char *buf, size_t buflen, int *errnop) { BufferManager buffer_manager(buf, buflen); - if (!FindGroup(grp, &buffer_manager, errnop)) - return *errnop == ERANGE ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; - std::vector<string> users; - if (!GetUsersForGroup(grp->gr_name, &users, errnop)) - return *errnop == ERANGE ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; - - if (!AddUsersToGroup(users, grp, &buffer_manager, errnop)) - return *errnop == ERANGE ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; + // Look for a matching user in cache. + FILE *p_file = fopen(OSLOGIN_PASSWD_CACHE_PATH, "re"); + if (p_file != NULL) { + struct passwd user; + struct passwd *userp = NULL; + char userbuf[MAXBUFSIZE]; + + while (fgetpwent_r(p_file, &user, userbuf, MAXBUFSIZE, &userp) == 0) { + if (user.pw_uid == gid) { + memset(grp, 0, sizeof(struct group)); + + // Copy from userbuf to user-provided buffer. + if (!buffer_manager.AppendString(user.pw_name, &grp->gr_name, errnop)) + return *errnop == ERANGE ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; + + // Add user to group. + std::vector<string> members; + members.push_back(string(user.pw_name)); + if (!AddUsersToGroup(members, grp, &buffer_manager, errnop)) + return *errnop == ERANGE ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; - return NSS_STATUS_SUCCESS; -} + return NSS_STATUS_SUCCESS; + } + } + fclose(p_file); + } -// look for OS Login user with uid matching the requested gid, and craft a -// self-group for it. -enum nss_status getselfgrgid(gid_t gid, struct group *grp, - char *buf, size_t buflen) { - BufferManager buffer_manager(buf, buflen); + // Look for matching user in backend. std::stringstream url; url << kMetadataServerUrl << "users?uid=" << gid; string response; @@ -131,33 +144,59 @@ return NSS_STATUS_NOTFOUND; } struct passwd result; - int errnop; - if (!ParseJsonToPasswd(response, &result, &buffer_manager, &errnop)) + if (!ParseJsonToPasswd(response, &result, &buffer_manager, errnop)) return NSS_STATUS_NOTFOUND; if (result.pw_gid != result.pw_uid) return NSS_STATUS_NOTFOUND; // Set the group name to the name of the matching user. - if (!buffer_manager.AppendString(result.pw_name, &grp->gr_name, &errnop)) - return NSS_STATUS_NOTFOUND; + if (!buffer_manager.AppendString(result.pw_name, &grp->gr_name, errnop)) + return *errnop == ERANGE ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; grp->gr_gid = result.pw_uid; // Create a list of only the matching user and add to members list. std::vector<string> members; members.push_back(string(result.pw_name)); - if (!AddUsersToGroup(members, grp, &buffer_manager, &errnop)) - return NSS_STATUS_NOTFOUND; + if (!AddUsersToGroup(members, grp, &buffer_manager, errnop)) + return *errnop == ERANGE ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; return NSS_STATUS_SUCCESS; } -// look for OS Login user with name matching the requested name, and craft a +// Look for OS Login user with name matching the requested name, and craft a // self-group for it. enum nss_status getselfgrnam(const char* name, struct group *grp, - char *buf, size_t buflen) { + char *buf, size_t buflen, int *errnop) { BufferManager buffer_manager(buf, buflen); + + // Look for a matching user in cache. + FILE *p_file = fopen(OSLOGIN_PASSWD_CACHE_PATH, "re"); + if (p_file != NULL) { + struct passwd user; + struct passwd *userp = NULL; + char userbuf[MAXBUFSIZE]; + + while (fgetpwent_r(p_file, &user, userbuf, MAXBUFSIZE, &userp) == 0) { + if (strcmp(user.pw_name, name) == 0) { + memset(grp, 0, sizeof(struct group)); + + grp->gr_gid = user.pw_uid; + + // Add user to group. + std::vector<string> members; + members.push_back(string(name)); + if (!AddUsersToGroup(members, grp, &buffer_manager, errnop)) + return *errnop == ERANGE ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; + + return NSS_STATUS_SUCCESS; + } + } + fclose(p_file); + } + + // Look for matching user in backend. std::stringstream url; url << kMetadataServerUrl << "users?username=" << UrlEncode(string(name)); string response; @@ -167,24 +206,23 @@ return NSS_STATUS_NOTFOUND; } struct passwd result; - int errnop; - if (!ParseJsonToPasswd(response, &result, &buffer_manager, &errnop)) + if (!ParseJsonToPasswd(response, &result, &buffer_manager, errnop)) return NSS_STATUS_NOTFOUND; if (result.pw_gid != result.pw_uid) return NSS_STATUS_NOTFOUND; // Set the group name to the name of the matching user. - if (!buffer_manager.AppendString(result.pw_name, &grp->gr_name, &errnop)) - return NSS_STATUS_NOTFOUND; + if (!buffer_manager.AppendString(result.pw_name, &grp->gr_name, errnop)) + return *errnop == ERANGE ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; grp->gr_gid = result.pw_uid; // Create a list of only the matching user and add to members list. std::vector<string> members; members.push_back(string(result.pw_name)); - if (!AddUsersToGroup(members, grp, &buffer_manager, &errnop)) - return NSS_STATUS_NOTFOUND; + if (!AddUsersToGroup(members, grp, &buffer_manager, errnop)) + return *errnop == ERANGE ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; return NSS_STATUS_SUCCESS; } @@ -194,11 +232,27 @@ enum nss_status _nss_oslogin_getgrgid_r(gid_t gid, struct group *grp, char *buf, size_t buflen, int *errnop) { + // If there is no cache file, we will assume there are no groups. + if (access(OSLOGIN_GROUP_CACHE_PATH, R_OK) != 0) + return getselfgrgid(gid, grp, buf, buflen, errnop); + memset(grp, 0, sizeof(struct group)); - if (getselfgrgid(gid, grp, buf, buflen) == NSS_STATUS_SUCCESS) - return NSS_STATUS_SUCCESS; - grp->gr_gid = gid; - return _nss_oslogin_getgrby(grp, buf, buflen, errnop); + BufferManager buffer_manager(buf, buflen); + if (!GetGroupByGID(gid, grp, &buffer_manager, errnop)) { + if (*errnop == ERANGE) { + return NSS_STATUS_TRYAGAIN; + } + return getselfgrgid(gid, grp, buf, buflen, errnop); + } + + std::vector<string> users; + if (!GetUsersForGroup(grp->gr_name, &users, errnop)) + return *errnop == ERANGE ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; + + if (!users.empty() && !AddUsersToGroup(users, grp, &buffer_manager, errnop)) + return *errnop == ERANGE ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; + + return NSS_STATUS_SUCCESS; } // _nss_oslogin_getgrnam_r() @@ -206,11 +260,27 @@ enum nss_status _nss_oslogin_getgrnam_r(const char *name, struct group *grp, char *buf, size_t buflen, int *errnop) { + // If there is no cache file, we will assume there are no groups. + if (access(OSLOGIN_GROUP_CACHE_PATH, R_OK) != 0) + return getselfgrnam(name, grp, buf, buflen, errnop); + memset(grp, 0, sizeof(struct group)); - if (getselfgrnam(name, grp, buf, buflen) == NSS_STATUS_SUCCESS) - return NSS_STATUS_SUCCESS; - grp->gr_name = (char *)name; - return _nss_oslogin_getgrby(grp, buf, buflen, errnop); + BufferManager buffer_manager(buf, buflen); + if (!GetGroupByName(string(name), grp, &buffer_manager, errnop)) { + if (*errnop == ERANGE) { + return NSS_STATUS_TRYAGAIN; + } + return getselfgrnam(name, grp, buf, buflen, errnop); + } + + std::vector<string> users; + if (!GetUsersForGroup(grp->gr_name, &users, errnop)) + return *errnop == ERANGE ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; + + if (!users.empty() && !AddUsersToGroup(users, grp, &buffer_manager, errnop)) + return *errnop == ERANGE ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; + + return NSS_STATUS_SUCCESS; } // _nss_cache_oslogin_initgroups_dyn() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-oslogin-20210316.00/src/oslogin_utils.cc new/guest-oslogin-20210429.00/src/oslogin_utils.cc --- old/guest-oslogin-20210316.00/src/oslogin_utils.cc 2021-01-22 01:05:26.000000000 +0100 +++ new/guest-oslogin-20210429.00/src/oslogin_utils.cc 2021-04-29 20:18:30.000000000 +0200 @@ -20,6 +20,7 @@ #include <grp.h> #include <nss.h> #include <stdio.h> +#include <stdlib.h> #include <time.h> #include <cstring> @@ -413,7 +414,7 @@ json_object* users = NULL; if (!json_object_object_get_ex(root, "usernames", &users)) { - return false; + return true; } if (json_object_get_type(users) != json_type_array) { return false; @@ -455,6 +456,7 @@ Group g; g.gid = json_object_get_int64(gid); + // get_int64 will confusingly return 0 if the string can't be converted to // an integer. We can't rely on type check as it may be a string in the API. if (g.gid == 0) { @@ -781,25 +783,32 @@ // ----------------- OS Login functions ----------------- -// TODO: this function reads all groups comparing names or gids; it should be -// replaced by groups?groupname= lookup when this is available. -bool FindGroup(struct group* result, BufferManager* buf, int* errnop) { - if (result->gr_name == NULL && result->gr_gid == 0) { - // Nobody told me what to find. + +bool GetGroupsForUser(string username, std::vector<Group>* groups, int* errnop) { + string response; + if (!(GetUser(username, &response))) { + DEBUG("GetGroupsForUser: !GetUser\n"); + *errnop = ENOENT; + return false; + } + + string email; + if (!ParseJsonToEmail(response, &email) || email.empty()) { + DEBUG("GetGroupsForUser: !ParseJsonToEmail\n"); + *errnop = ENOENT; return false; } + std::stringstream url; - std::vector<Group> groups; - string response; long http_code; - string pageToken = ""; + string pageToken (""); do { url.str(""); - url << kMetadataServerUrl << "groups"; + url << kMetadataServerUrl << "groups?email=" << email; if (pageToken != "") - url << "?pageToken=" << pageToken; + url << "&pagetoken=" << pageToken; response.clear(); http_code = 0; @@ -810,97 +819,95 @@ } if (!ParseJsonToKey(response, "nextPageToken", &pageToken)) { - pageToken = ""; - } - - groups.clear(); - if (!ParseJsonToGroups(response, &groups) || groups.empty()) { *errnop = ENOENT; return false; } - // Check for a match. - for (int i = 0; i < (int) groups.size(); i++) { - Group el = groups[i]; - if ((result->gr_name != NULL) && (string(result->gr_name) == el.name)) { - // Set the name even though it matches because the final string must - // be stored in the provided buffer. - if (!buf->AppendString(el.name, &result->gr_name, errnop)) { - return false; - } - result->gr_gid = el.gid; - return true; - } - if ((result->gr_gid != 0) && (result->gr_gid == el.gid)) { - if (!buf->AppendString(el.name, &result->gr_name, errnop)) { - return false; - } - return true; - } + if (!ParseJsonToGroups(response, groups)) { + *errnop = ENOENT; + return false; } } while (pageToken != "0"); - // Not found. - *errnop = ENOENT; - return false; + return true; } -bool GetGroupsForUser(string username, std::vector<Group>* groups, int* errnop) { +bool GetGroupByName(string name, struct group* result, BufferManager* buf, int* errnop) { + std::stringstream url; + std::vector<Group> groups; + string response; - if (!(GetUser(username, &response))) { - DEBUG("GetGroupsForUser: !GetUser\n"); - *errnop = ENOENT; + long http_code; + + url.str(""); + url << kMetadataServerUrl << "groups?groupname=" << name; + + response.clear(); + http_code = 0; + if (!HttpGet(url.str(), &response, &http_code) || http_code != 200 || + response.empty()) { + *errnop = EAGAIN; return false; } - string email; - if (!ParseJsonToEmail(response, &email) || email.empty()) { - DEBUG("GetGroupsForUser: !ParseJsonToEmail\n"); + groups.clear(); + if (!ParseJsonToGroups(response, &groups) || groups.empty() || groups.size() != 1) { *errnop = ENOENT; return false; } + Group el = groups[0]; + result->gr_gid = el.gid; + if (!buf->AppendString(el.name, &result->gr_name, errnop)) { + return false; + } + + return true; +} + +bool GetGroupByGID(int gid, struct group* result, BufferManager* buf, int* errnop) { std::stringstream url; + std::vector<Group> groups; + string response; long http_code; - string pageToken = ""; - do { - url.str(""); - url << kMetadataServerUrl << "groups?email=" << email; - if (pageToken != "") - url << "?pageToken=" << pageToken; + url.str(""); + url << kMetadataServerUrl << "groups?gid=" << gid; - response.clear(); - http_code = 0; - if (!HttpGet(url.str(), &response, &http_code) || http_code != 200 || - response.empty()) { - *errnop = EAGAIN; - return false; - } + response.clear(); + http_code = 0; + if (!HttpGet(url.str(), &response, &http_code) || http_code != 200 || + response.empty()) { + *errnop = EAGAIN; + return false; + } - if (!ParseJsonToKey(response, "pageToken", &pageToken)) { - pageToken = ""; - } + groups.clear(); + if (!ParseJsonToGroups(response, &groups) || groups.empty() || groups.size() != 1) { + *errnop = ENOENT; + return false; + } + + Group el = groups[0]; + result->gr_gid = el.gid; + if (!buf->AppendString(el.name, &result->gr_name, errnop)) { + return false; + } - if (!ParseJsonToGroups(response, groups)) { - *errnop = ENOENT; - return false; - } - } while (pageToken != ""); return true; } bool GetUsersForGroup(string groupname, std::vector<string>* users, int* errnop) { string response; long http_code; - string pageToken = ""; + string pageToken (""); std::stringstream url; do { url.str(""); url << kMetadataServerUrl << "users?groupname=" << groupname; if (pageToken != "") - url << "?pageToken=" << pageToken; + url << "&pagetoken=" << pageToken; response.clear(); http_code = 0; @@ -910,10 +917,10 @@ return false; } if (!ParseJsonToKey(response, "nextPageToken", &pageToken)) { - pageToken = ""; + *errnop = EINVAL; + return false; } if (!ParseJsonToUsers(response, users)) { - // TODO: what if there are no users? add a test. *errnop = EINVAL; return false; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-oslogin-20210316.00/test/Makefile new/guest-oslogin-20210429.00/test/Makefile --- old/guest-oslogin-20210316.00/test/Makefile 2021-01-22 01:05:26.000000000 +0100 +++ new/guest-oslogin-20210429.00/test/Makefile 2021-04-29 20:18:30.000000000 +0200 @@ -28,13 +28,13 @@ $(NEW_TEST_RUNNER) ${GTESTARGS} non_network_tests : test_runner new_test_runner - $(TEST_RUNNER) --gtest_filter=*-FindGroupTest.*:GetUsersForGroupTest.* + $(TEST_RUNNER) --gtest_filter=*-GetGroupByTest.*:GetUsersForGroupTest.* $(NEW_TEST_RUNNER) --gtest_filter=ParserTest.* network_tests : test_runner ping reset - $(TEST_RUNNER) --gtest_filter=FindGroupTest.*:GetUsersForGroupTest.* + $(TEST_RUNNER) --gtest_filter=GetGroupByTest.*:GetUsersForGroupTest.* -# run as $ make tests GTESTARGS="--gtest_filter=FindGroupTest.*" +# run as $ make tests GTESTARGS="--gtest_filter=GetGroupByTest.*" alltests : test_runner $(TEST_RUNNER) ${GTESTARGS} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-oslogin-20210316.00/test/oslogin_utils_test.cc new/guest-oslogin-20210429.00/test/oslogin_utils_test.cc --- old/guest-oslogin-20210316.00/test/oslogin_utils_test.cc 2021-01-22 01:05:26.000000000 +0100 +++ new/guest-oslogin-20210429.00/test/oslogin_utils_test.cc 2021-04-29 20:18:30.000000000 +0200 @@ -406,23 +406,13 @@ // Test parsing a valid JSON response from the metadata server. TEST(ParseJsonToUsersTest, ParseJsonToUsersEmptyGroupSucceeds) { - string test_group_users = "{\"usernames\":[]}"; + string test_group_users = "{\"nextPageToken\":\"0\"}"; std::vector<string> users; ASSERT_TRUE(ParseJsonToUsers(test_group_users, &users)); ASSERT_TRUE(users.empty()); } -// Test parsing malformed JSON responses. -TEST(ParseJsonToUsersTest, ParseJsonToUsersFails) { - string test_group_users = - "{\"badstuff\":[\"user0001\",\"user0002\",\"user0003\",\"user0004\"," - "\"user0005\"]}"; - - std::vector<string> users; - ASSERT_FALSE(ParseJsonToUsers(test_group_users, &users)); -} - TEST(GetUsersForGroupTest, GetUsersForGroupSucceeds) { string response; long http_code; @@ -437,10 +427,11 @@ ASSERT_EQ(errnop, 0); } -TEST(FindGroupTest, FindGroupByGidSucceeds) { +TEST(GetGroupByTest, GetGroupByNameSucceeds) { string response; long http_code; ASSERT_TRUE(HttpGet("http://metadata.google.internal/reset", &response, &http_code)); + ASSERT_EQ(http_code, 200); size_t buflen = 200 * sizeof(char); char* buffer = (char*)malloc(buflen); @@ -449,12 +440,11 @@ int errnop = 0; struct group grp = {}; - grp.gr_gid = 123452; - ASSERT_TRUE(FindGroup(&grp, &buf, &errnop)); + ASSERT_TRUE(GetGroupByName("demo", &grp, &buf, &errnop)); ASSERT_EQ(errnop, 0); } -TEST(FindGroupTest, FindGroupByNameSucceeds) { +TEST(GetGroupByTest, GetGroupByGIDSucceeds) { string response; long http_code; ASSERT_TRUE(HttpGet("http://metadata.google.internal/reset", &response, &http_code)); @@ -463,12 +453,11 @@ char* buffer = (char*)malloc(buflen); ASSERT_STRNE(buffer, NULL); BufferManager buf(buffer, buflen); - int errnop; + int errnop = 0; - const char* match = "demo"; struct group grp = {}; - grp.gr_name = (char*)match; - ASSERT_TRUE(FindGroup(&grp, &buf, &errnop)); + ASSERT_TRUE(GetGroupByGID(123452, &grp, &buf, &errnop)); + ASSERT_EQ(errnop, 0); } TEST(ParseJsonEmailTest, SuccessfullyParsesEmail) {