|
13 | 13 | #include "funcapi.h"
|
14 | 14 | #include "fmgr.h"
|
15 | 15 | #include "miscadmin.h"
|
| 16 | + |
16 | 17 | #include "libpq-fe.h"
|
| 18 | +#include "common/username.h" |
| 19 | + |
17 | 20 | #include "postmaster/postmaster.h"
|
18 | 21 | #include "postmaster/bgworker.h"
|
19 | 22 | #include "storage/lwlock.h"
|
@@ -1932,21 +1935,31 @@ static void MtmSplitConnStrs(void)
|
1932 | 1935 | elog(ERROR, "Database is not specified in connection string: '%s'", connStr);
|
1933 | 1936 |
|
1934 | 1937 | if (dbUser == NULL)
|
1935 |
| - elog(ERROR, "Database user is not specified in connection string: '%s'", connStr); |
| 1938 | + { |
| 1939 | + char *errstr; |
| 1940 | + const char *username = get_user_name(&errstr); |
| 1941 | + if (!username) |
| 1942 | + elog(FATAL, "Database user is not specified in connection string '%s', fallback failed: %s", connStr, errstr); |
| 1943 | + else |
| 1944 | + elog(WARNING, "Database user is not specified in connection string '%s', fallback to '%s'", connStr, username); |
| 1945 | + MtmDatabaseUser = pstrdup(username); |
| 1946 | + } |
| 1947 | + else |
| 1948 | + { |
| 1949 | + dbUser += 5; |
| 1950 | + end = strchr(dbUser, ' '); |
| 1951 | + if (!end) end = strchr(dbUser, '\0'); |
| 1952 | + Assert(end != NULL); |
| 1953 | + len = end - dbUser; |
| 1954 | + MtmDatabaseUser = pnstrdup(dbUser, len); |
| 1955 | + } |
1936 | 1956 |
|
1937 | 1957 | dbName += 7;
|
1938 |
| - for (end = dbName; *end != ' ' && *end != '\0'; end++); |
| 1958 | + end = strchr(dbName, ' '); |
| 1959 | + if (!end) end = strchr(dbName, '\0'); |
| 1960 | + Assert(end != NULL); |
1939 | 1961 | len = end - dbName;
|
1940 |
| - MtmDatabaseName = (char*)palloc(len + 1); |
1941 |
| - memcpy(MtmDatabaseName, dbName, len); |
1942 |
| - MtmDatabaseName[len] = '\0'; |
1943 |
| - |
1944 |
| - dbUser += 5; |
1945 |
| - for (end = dbUser; *end != ' ' && *end != '\0'; end++); |
1946 |
| - len = end - dbUser; |
1947 |
| - MtmDatabaseUser = (char*)palloc(len + 1); |
1948 |
| - memcpy(MtmDatabaseUser, dbUser, len); |
1949 |
| - MtmDatabaseUser[len] = '\0'; |
| 1962 | + MtmDatabaseName = pnstrdup(dbName, len); |
1950 | 1963 | }
|
1951 | 1964 | connStr = p + 1;
|
1952 | 1965 | }
|
|
0 commit comments