1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
/*
* SQLRemoveDSNFromIni.c
*
* $Id: SQLRemoveDSNFromIni.c,v 1.1 2001/06/07 00:48:50 source Exp $
*
* Remove a DSN
*
* The iODBC driver manager.
*
* Copyright (C) 2001 by OpenLink Software <iodbc@openlinksw.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <iodbc.h>
#include <iodbcinst.h>
#include "inifile.h"
#include "misc.h"
#include "iodbc_error.h"
extern BOOL ValidDSN(LPCSTR);
BOOL
RemoveDSNFromIni (LPCSTR lpszDSN)
{
char szBuffer[4096];
BOOL retcode = FALSE;
PCONFIG pCfg;
/* Check dsn */
if (!lpszDSN || !ValidDSN (lpszDSN) || !STRLEN (lpszDSN))
{
PUSH_ERROR (ODBC_ERROR_INVALID_DSN);
goto quit;
}
if (_iodbcdm_cfg_search_init (&pCfg, "odbc.ini", TRUE))
{
PUSH_ERROR (ODBC_ERROR_REQUEST_FAILED);
goto quit;
}
if (strcmp (lpszDSN, "Default"))
{
/* deletes a DSN from [ODBC data sources] section */
#ifdef WIN32
_iodbcdm_cfg_write (pCfg, "ODBC 32 bit Data Sources", (LPSTR) lpszDSN,
NULL);
#else
_iodbcdm_cfg_write (pCfg, "ODBC Data Sources", (LPSTR) lpszDSN, NULL);
#endif
}
/* deletes the DSN section in odbc.ini */
_iodbcdm_cfg_write (pCfg, (LPSTR) lpszDSN, NULL, NULL);
if (_iodbcdm_cfg_commit (pCfg))
{
PUSH_ERROR (ODBC_ERROR_REQUEST_FAILED);
goto done;
}
retcode = TRUE;
done:
_iodbcdm_cfg_done (pCfg);
quit:
return retcode;
}
BOOL INSTAPI
SQLRemoveDSNFromIni (LPCSTR lpszDSN)
{
BOOL retcode = FALSE;
CLEAR_ERROR ();
switch (configMode)
{
case ODBC_USER_DSN:
wSystemDSN = USERDSN_ONLY;
retcode = RemoveDSNFromIni (lpszDSN);
goto quit;
case ODBC_SYSTEM_DSN:
wSystemDSN = SYSTEMDSN_ONLY;
retcode = RemoveDSNFromIni (lpszDSN);
goto quit;
case ODBC_BOTH_DSN:
wSystemDSN = USERDSN_ONLY;
retcode = RemoveDSNFromIni (lpszDSN);
if (!retcode)
{
CLEAR_ERROR ();
wSystemDSN = SYSTEMDSN_ONLY;
retcode = RemoveDSNFromIni (lpszDSN);
}
goto quit;
};
PUSH_ERROR (ODBC_ERROR_GENERAL_ERR);
goto quit;
quit:
wSystemDSN = USERDSN_ONLY;
configMode = ODBC_BOTH_DSN;
return retcode;
}
|