#include <regex>
#include <string>
#include <iostream>
std::string remove_password(std::string const& input)
{
// I think this should work for skipping escaped quotes in the password.
// It works in javascript, but not in the standard library implementation.
// anyone have any ideas?
// (.*password\(("|'))(?:\\\2|[^\2])*?(\2.*)
// const char prog[] = R"__regex((.*password\(')([^']*)('.*)))__regex";
const char prog[] = R"((.*password\((["']))(?:\\\2|(?!\2)[^])*?(\2.*))";
auto reg = std::regex(prog);
std::smatch match;
std::regex_match(input, match, reg);
// match[0] is the entire string
// match[1] is pre-password
// match[2] is the password
// match[3] is post-password
return match[1].str() + "********" + match[3].str();
}
int main()
{
using namespace std::literals;
auto test_string = R"__(select * from run_on_hive(server('hdp230m2.labs.teradata.com'),username('vijay'),password('vijay'),dbname('default'),query('analyze table default.test01 compute statistics'));)__";
std::cout << remove_password(test_string);
}
I2luY2x1ZGUgPHJlZ2V4PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8aW9zdHJlYW0+CgpzdGQ6OnN0cmluZyByZW1vdmVfcGFzc3dvcmQoc3RkOjpzdHJpbmcgY29uc3QmIGlucHV0KQp7CiAgICAvLyBJIHRoaW5rIHRoaXMgc2hvdWxkIHdvcmsgZm9yIHNraXBwaW5nIGVzY2FwZWQgcXVvdGVzIGluIHRoZSBwYXNzd29yZC4KICAgIC8vIEl0IHdvcmtzIGluIGphdmFzY3JpcHQsIGJ1dCBub3QgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgaW1wbGVtZW50YXRpb24uCiAgICAvLyBhbnlvbmUgaGF2ZSBhbnkgaWRlYXM/CiAgICAvLyAoLipwYXNzd29yZFwoKCJ8JykpKD86XFxcMnxbXlwyXSkqPyhcMi4qKQovLyAgICBjb25zdCBjaGFyIHByb2dbXSA9IFIiX19yZWdleCgoLipwYXNzd29yZFwoJykoW14nXSopKCcuKikpKV9fcmVnZXgiOwogICAgY29uc3QgY2hhciBwcm9nW10gPSBSIigoLipwYXNzd29yZFwoKFsiJ10pKSg/OlxcXDJ8KD8hXDIpW15dKSo/KFwyLiopKSI7CiAgICBhdXRvIHJlZyA9IHN0ZDo6cmVnZXgocHJvZyk7CiAgICBzdGQ6OnNtYXRjaCBtYXRjaDsKICAgIHN0ZDo6cmVnZXhfbWF0Y2goaW5wdXQsIG1hdGNoLCByZWcpOwogICAgLy8gbWF0Y2hbMF0gaXMgdGhlIGVudGlyZSBzdHJpbmcKICAgIC8vIG1hdGNoWzFdIGlzIHByZS1wYXNzd29yZAogICAgLy8gbWF0Y2hbMl0gaXMgdGhlIHBhc3N3b3JkCiAgICAvLyBtYXRjaFszXSBpcyBwb3N0LXBhc3N3b3JkCiAgICByZXR1cm4gbWF0Y2hbMV0uc3RyKCkgKyAiKioqKioqKioiICsgbWF0Y2hbM10uc3RyKCk7Cn0KCmludCBtYWluKCkKewogICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDo6bGl0ZXJhbHM7CgogICAgYXV0byB0ZXN0X3N0cmluZyA9IFIiX18oc2VsZWN0ICogZnJvbSBydW5fb25faGl2ZShzZXJ2ZXIoJ2hkcDIzMG0yLmxhYnMudGVyYWRhdGEuY29tJyksdXNlcm5hbWUoJ3ZpamF5JykscGFzc3dvcmQoJ3ZpamF5JyksZGJuYW1lKCdkZWZhdWx0JykscXVlcnkoJ2FuYWx5emUgdGFibGUgZGVmYXVsdC50ZXN0MDEgY29tcHV0ZSBzdGF0aXN0aWNzJykpOylfXyI7CgogICAgc3RkOjpjb3V0IDw8IHJlbW92ZV9wYXNzd29yZCh0ZXN0X3N0cmluZyk7Cn0=