Skip to content

Instantly share code, notes, and snippets.

@mariuz
Created August 6, 2015 17:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mariuz/9e1823d7f3d4dcc3bcef to your computer and use it in GitHub Desktop.
Save mariuz/9e1823d7f3d4dcc3bcef to your computer and use it in GitHub Desktop.
#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