You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kudu.apache.org by "Michael Ho (JIRA)" <ji...@apache.org> on 2018/09/15 01:11:00 UTC

[jira] [Created] (KUDU-2579) Failure in GetLoggedInUser() may cause a RPC client to fail negotiation

Michael Ho created KUDU-2579:
--------------------------------

             Summary: Failure in GetLoggedInUser() may cause a RPC client to fail negotiation
                 Key: KUDU-2579
                 URL: https://issues.apache.org/jira/browse/KUDU-2579
             Project: Kudu
          Issue Type: Bug
          Components: rpc
    Affects Versions: 1.7.1
            Reporter: Michael Ho


{{GetLoggedInUser()}} may fail when calling {{getpwuid_r()}}:
{noformat}
Error calling getpwuid_r(): No such file or directory (error 2). 
{noformat}

In which case, a newly created Proxy object may have an empty username in the user credentials. That leads to an error during negotiation when using plain text SASL. it seems more robust to fall back to some default user name when {{GetLoggedInUser()}} fails.
{noformat}
Not authorized: Client connection negotiation failed: client connection to 127.0.0.1:27000: SASL(-1): generic failure: All-whitespace username.
{noformat}

Relevant code below:
{noformat}
Proxy::Proxy(std::shared_ptr<Messenger> messenger,
             const Sockaddr& remote,
             string hostname,
             string service_name)
    : service_name_(std::move(service_name)),
      messenger_(std::move(messenger)),
      is_started_(false) {
  CHECK(messenger_ != nullptr);
  DCHECK(!service_name_.empty()) << "Proxy service name must not be blank";

  // By default, we set the real user to the currently logged-in user.
  // Effective user and password remain blank.
  string real_user; <<----- "empty"
  Status s = GetLoggedInUser(&real_user);
  if (!s.ok()) {
    LOG(WARNING) << "Proxy for " << service_name_ << ": Unable to get logged-in user name: "
        << s.ToString() << " before connecting to remote: " << remote.ToString();
  }

  UserCredentials creds;
  creds.set_real_user(std::move(real_user));
  conn_id_ = ConnectionId(remote, std::move(hostname), std::move(creds));
}
{noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)