]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix dblink to treat connection names longer than NAMEDATALEN-2 (62 bytes).
authorItagaki Takahiro <itagaki.takahiro@gmail.com>
Thu, 3 Jun 2010 09:44:35 +0000 (09:44 +0000)
committerItagaki Takahiro <itagaki.takahiro@gmail.com>
Thu, 3 Jun 2010 09:44:35 +0000 (09:44 +0000)
Now long names are adjusted with truncate_identifier() and NOTICE messages
are raised if names are actually truncated.

Backported to release 8.0.

contrib/dblink/dblink.c

index 69bf982a1df478c02acad606d21e2b2dac3a53b9..16f502008183ea5adc0af817e6000bb5de5ff565 100644 (file)
@@ -47,6 +47,7 @@
 #include "nodes/execnodes.h"
 #include "nodes/pg_list.h"
 #include "parser/parse_type.h"
+#include "parser/scansup.h"
 #include "tcop/tcopprot.h"
 #include "utils/builtins.h"
 #include "utils/fmgroids.h"
@@ -2107,13 +2108,13 @@ static remoteConn *
 getConnectionByName(const char *name)
 {
        remoteConnHashEnt *hentry;
-       char            key[NAMEDATALEN];
+       char       *key;
 
        if (!remoteConnHash)
                remoteConnHash = createConnHash();
 
-       MemSet(key, 0, NAMEDATALEN);
-       snprintf(key, NAMEDATALEN - 1, "%s", name);
+       key = pstrdup(name);
+       truncate_identifier(key, strlen(key), true);
        hentry = (remoteConnHashEnt *) hash_search(remoteConnHash,
                                                                                           key, HASH_FIND, NULL);
 
@@ -2139,13 +2140,13 @@ createNewConnection(const char *name, remoteConn * rconn)
 {
        remoteConnHashEnt *hentry;
        bool            found;
-       char            key[NAMEDATALEN];
+       char       *key;
 
        if (!remoteConnHash)
                remoteConnHash = createConnHash();
 
-       MemSet(key, 0, NAMEDATALEN);
-       snprintf(key, NAMEDATALEN - 1, "%s", name);
+       key = pstrdup(name);
+       truncate_identifier(key, strlen(key), true);
        hentry = (remoteConnHashEnt *) hash_search(remoteConnHash, key,
                                                                                           HASH_ENTER, &found);
 
@@ -2163,14 +2164,13 @@ deleteConnection(const char *name)
 {
        remoteConnHashEnt *hentry;
        bool            found;
-       char            key[NAMEDATALEN];
+       char       *key;
 
        if (!remoteConnHash)
                remoteConnHash = createConnHash();
 
-       MemSet(key, 0, NAMEDATALEN);
-       snprintf(key, NAMEDATALEN - 1, "%s", name);
-
+       key = pstrdup(name);
+       truncate_identifier(key, strlen(key), true);
        hentry = (remoteConnHashEnt *) hash_search(remoteConnHash,
                                                                                           key, HASH_REMOVE, &found);