| Index: chrome/browser/policy/policy_path_parser_linux.cc
|
| diff --git a/chrome/browser/policy/policy_path_parser_linux.cc b/chrome/browser/policy/policy_path_parser_linux.cc
|
| index e0bed0986234efb7352c3451beeb68e565319935..4509f18552b6d58dc7f16b93ecdc71bbb4988fcf 100644
|
| --- a/chrome/browser/policy/policy_path_parser_linux.cc
|
| +++ b/chrome/browser/policy/policy_path_parser_linux.cc
|
| @@ -8,51 +8,47 @@
|
|
|
| #include "chrome/browser/policy/policy_path_parser.h"
|
|
|
| +#include "base/bind.h"
|
| #include "base/logging.h"
|
|
|
| namespace policy {
|
|
|
| namespace path_parser {
|
|
|
| +namespace internal {
|
| +
|
| const char* kMachineNamePolicyVarName = "${machine_name}";
|
| const char* kUserNamePolicyVarName = "${user_name}";
|
|
|
| -// Replaces all variable occurrences in the policy string with the respective
|
| -// system settings values.
|
| -base::FilePath::StringType ExpandPathVariables(
|
| - const base::FilePath::StringType& untranslated_string) {
|
| - base::FilePath::StringType result(untranslated_string);
|
| - if (result.length() == 0)
|
| - return result;
|
| - // Sanitize quotes in case of any around the whole string.
|
| - if (result.length() > 1 &&
|
| - ((result[0] == '"' && result[result.length() - 1] == '"') ||
|
| - (result[0] == '\'' && result[result.length() - 1] == '\''))) {
|
| - // Strip first and last char which should be matching quotes now.
|
| - result = result.substr(1, result.length() - 2);
|
| - }
|
| - // Translate two special variables ${user_name} and ${machine_name}
|
| - size_t position = result.find(kUserNamePolicyVarName);
|
| - if (position != std::string::npos) {
|
| - struct passwd* user = getpwuid(geteuid());
|
| - if (user) {
|
| - result.replace(position, strlen(kUserNamePolicyVarName), user->pw_name);
|
| - } else {
|
| - LOG(ERROR) << "Username variable can not be resolved. ";
|
| - }
|
| - }
|
| - position = result.find(kMachineNamePolicyVarName);
|
| - if (position != std::string::npos) {
|
| - char machinename[255];
|
| - if (gethostname(machinename, 255) == 0) {
|
| - result.replace(position, strlen(kMachineNamePolicyVarName), machinename);
|
| - } else {
|
| - LOG(ERROR) << "Machine name variable can not be resolved.";
|
| - }
|
| - }
|
| - return result;
|
| +bool GetUserName(base::FilePath::StringType* value) {
|
| + struct passwd* user = getpwuid(geteuid());
|
| + if (user)
|
| + *value = base::FilePath::StringType(user->pw_name);
|
| + else
|
| + LOG(ERROR) << "Username variable can not be resolved. ";
|
| + return (user != NULL);
|
| +}
|
| +
|
| +bool GetMachineName(base::FilePath::StringType* value) {
|
| + char machinename[255];
|
| + int status;
|
| + if ((status = gethostname(machinename, 255)) == 0)
|
| + *value = base::FilePath::StringType(machinename);
|
| + else
|
| + LOG(ERROR) << "Machine name variable can not be resolved.";
|
| + return (status == 0);
|
| }
|
|
|
| +// A table mapping variable name to their respective getvalue callbacks.
|
| +const VariableNameAndValueCallback kVariableNameAndValueCallbacks[] = {
|
| + {kUserNamePolicyVarName, &GetUserName},
|
| + {kMachineNamePolicyVarName, &GetMachineName}};
|
| +
|
| +// Total number of entries in the mapping table.
|
| +const int kNoOfVariables = arraysize(kVariableNameAndValueCallbacks);
|
| +
|
| +} // namespace internal
|
| +
|
| void CheckUserDataDirPolicy(base::FilePath* user_data_dir) {
|
| // This function is not implemented in Linux because we don't support the
|
| // policy on this platform.
|
|
|