drvconn.c 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /*
  2. * drvconn.c
  3. *
  4. * $Id$
  5. *
  6. * The data_sources dialog for SQLDriverConnect and a login box procedures
  7. *
  8. * The iODBC driver manager.
  9. *
  10. * Copyright (C) 1996-2021 OpenLink Software <[email protected]>
  11. * All Rights Reserved.
  12. *
  13. * This software is released under the terms of either of the following
  14. * licenses:
  15. *
  16. * - GNU Library General Public License (see LICENSE.LGPL)
  17. * - The BSD License (see LICENSE.BSD).
  18. *
  19. * Note that the only valid version of the LGPL license as far as this
  20. * project is concerned is the original GNU Library General Public License
  21. * Version 2, dated June 1991.
  22. *
  23. * While not mandated by the BSD license, any patches you make to the
  24. * iODBC source code may be contributed back into the iODBC project
  25. * at your discretion. Contributions will benefit the Open Source and
  26. * Data Access community as a whole. Submissions may be made at:
  27. *
  28. * http://www.iodbc.org
  29. *
  30. *
  31. * GNU Library Generic Public License Version 2
  32. * ============================================
  33. * This library is free software; you can redistribute it and/or
  34. * modify it under the terms of the GNU Library General Public
  35. * License as published by the Free Software Foundation; only
  36. * Version 2 of the License dated June 1991.
  37. *
  38. * This library is distributed in the hope that it will be useful,
  39. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  40. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  41. * Library General Public License for more details.
  42. *
  43. * You should have received a copy of the GNU Library General Public
  44. * License along with this library; if not, write to the Free
  45. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  46. *
  47. *
  48. * The BSD License
  49. * ===============
  50. * Redistribution and use in source and binary forms, with or without
  51. * modification, are permitted provided that the following conditions
  52. * are met:
  53. *
  54. * 1. Redistributions of source code must retain the above copyright
  55. * notice, this list of conditions and the following disclaimer.
  56. * 2. Redistributions in binary form must reproduce the above copyright
  57. * notice, this list of conditions and the following disclaimer in
  58. * the documentation and/or other materials provided with the
  59. * distribution.
  60. * 3. Neither the name of OpenLink Software Inc. nor the names of its
  61. * contributors may be used to endorse or promote products derived
  62. * from this software without specific prior written permission.
  63. *
  64. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  65. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  66. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  67. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL OPENLINK OR
  68. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  69. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  70. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  71. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  72. * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  73. * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  74. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  75. */
  76. #include "gui.h"
  77. #include <iodbc.h>
  78. #include "herr.h"
  79. #include "dlproc.h"
  80. SQLRETURN SQL_API
  81. _iodbcdm_drvconn_dialbox (
  82. HWND hwnd,
  83. LPSTR szInOutConnStr,
  84. DWORD cbInOutConnStr,
  85. int * sqlStat,
  86. SQLUSMALLINT fDriverCompletion,
  87. UWORD * config)
  88. {
  89. RETCODE retcode = SQL_ERROR;
  90. char *szDSN = NULL, *szDriver = NULL, *szUID = NULL, *szPWD = NULL, *curr;
  91. TLOGIN log_t;
  92. /* Check input parameters */
  93. if (!hwnd || !szInOutConnStr || cbInOutConnStr < 1)
  94. goto quit;
  95. /* Check if the DSN is already set or DRIVER */
  96. for (curr = szInOutConnStr; *curr; curr += (STRLEN (curr) + 1))
  97. {
  98. if (!strncasecmp (curr, "DSN=", STRLEN ("DSN=")))
  99. {
  100. szDSN = curr + STRLEN ("DSN=");
  101. continue;
  102. }
  103. if (!strncasecmp (curr, "DRIVER=", STRLEN ("DRIVER=")))
  104. {
  105. szDriver = curr + STRLEN ("DRIVER=");
  106. continue;
  107. }
  108. if (!strncasecmp (curr, "UID=", STRLEN ("UID=")))
  109. {
  110. szUID = curr + STRLEN ("UID=");
  111. continue;
  112. }
  113. if (!strncasecmp (curr, "UserName=", STRLEN ("UserName=")))
  114. {
  115. szUID = curr + STRLEN ("UserName=");
  116. continue;
  117. }
  118. if (!strncasecmp (curr, "LastUser=", STRLEN ("LastUser=")))
  119. {
  120. szUID = curr + STRLEN ("LastUser=");
  121. continue;
  122. }
  123. if (!strncasecmp (curr, "PWD=", STRLEN ("PWD=")))
  124. {
  125. szPWD = curr + STRLEN ("PWD=");
  126. continue;
  127. }
  128. if (!strncasecmp (curr, "Password=", STRLEN ("Password=")))
  129. {
  130. szPWD = curr + STRLEN ("Password=");
  131. continue;
  132. }
  133. }
  134. if (fDriverCompletion != SQL_DRIVER_NOPROMPT && (!szUID || !szPWD))
  135. {
  136. create_login (hwnd, szUID, szPWD, szDSN ? szDSN : "(File DSN)", &log_t);
  137. if (log_t.user && !szUID)
  138. {
  139. sprintf (curr, "UID=%s", log_t.user);
  140. curr += STRLEN (curr);
  141. *curr++ = '\0';
  142. free (log_t.user);
  143. }
  144. if (log_t.pwd && !szPWD)
  145. {
  146. sprintf (curr, "PWD=%s", log_t.pwd);
  147. curr += STRLEN (curr);
  148. *curr++ = '\0';
  149. free (log_t.pwd);
  150. }
  151. /* add list-terminating '\0' */
  152. *curr = '\0';
  153. }
  154. retcode = log_t.ok == TRUE ? SQL_SUCCESS : SQL_NO_DATA_FOUND;
  155. quit:
  156. for (curr = szInOutConnStr; *curr; curr = szDSN + 1)
  157. {
  158. szDSN = curr + STRLEN (curr);
  159. if (szDSN[1])
  160. szDSN[0] = ';';
  161. }
  162. return retcode;
  163. }