Created
August 6, 2015 17:51
-
-
Save mariuz/9e1823d7f3d4dcc3bcef to your computer and use it in GitHub Desktop.
firebird service_query updated https://www.ibphoenix.com/resources/documents/design/doc_180
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <string.h> | |
#include <stdlib.h> | |
#include <ibase.h> | |
#define SVC_RESPBUF 512 | |
int main (void) { | |
char *user = "SYSDBA", | |
*pass = "masterkey"; | |
char *x; | |
ISC_STATUS status [20]; | |
isc_svc_handle *svc_handle = NULL; | |
char svc_name[32], | |
spb_buff[128], | |
*spb = spb_buff; | |
ISC_USHORT spblen; | |
*spb++ = isc_spb_version; | |
*spb++ = isc_spb_current_version; | |
*spb++ = isc_spb_user_name; | |
*spb++ = strlen (user); | |
for (x = user; *x;) | |
*spb++ = *x++; | |
*spb++ = isc_spb_password; | |
*spb++ = strlen (pass); | |
for (x = pass; *x;) | |
*spb++ = *x++; | |
sprintf(svc_name, "service_mgr"); /* Local */ | |
spblen = spb - spb_buff; | |
if (isc_service_attach (status, 0, svc_name, &svc_handle, spblen, spb_buff)) | |
{ | |
isc_print_status (status); | |
exit (1); | |
} | |
char respbuf[SVC_RESPBUF], | |
recvbuf[] = { isc_info_svc_server_version, isc_info_svc_get_env_msg }; | |
char *p = respbuf; | |
ISC_ULONG path_length; | |
/* service attach happens here */ | |
if (isc_service_query (status, &svc_handle, NULL, 0, NULL, sizeof (recvbuf), | |
recvbuf, SVC_RESPBUF, respbuf)) | |
{ | |
isc_print_status (status); | |
isc_service_detach (status, &svc_handle); | |
return; | |
} | |
do { | |
switch (*p++) | |
{ | |
case isc_info_truncated: | |
printf ("Buffer Truncated\n"); | |
break; | |
case isc_info_svc_server_version: | |
{ char *buffer; | |
path_length = (ISC_USHORT) isc_vax_integer (p, sizeof(ISC_USHORT)); | |
p += sizeof (ISC_USHORT); | |
buffer = (char*) malloc (path_length); | |
strncpy (buffer, p, path_length); | |
buffer [path_length] = '\0'; | |
printf ("Server version: %s\n", buffer); | |
p += path_length; | |
break; | |
} | |
case isc_info_svc_get_env_msg: | |
{ | |
ISC_USHORT path_length; | |
char *buffer; | |
path_length = (ISC_USHORT) isc_vax_integer (p, sizeof(ISC_USHORT)); | |
p += sizeof (ISC_USHORT); | |
buffer = (char*) malloc (path_length); | |
strncpy (buffer, p, path_length); | |
buffer [path_length] = '\0'; | |
printf ("Path to INTERBASE.MSG: %sn", buffer); | |
p += path_length; | |
break; | |
} | |
} | |
} while (*p); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment