home *** CD-ROM | disk | FTP | other *** search
/ Freelog 42 / Freelog042.iso / Alu / Ancestrologie / Sources / InterBase_WI-V6.0.1-server.ZIP / examples / services / start_user_add.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-01-05  |  3.6 KB  |  140 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <malloc.h>
  4. #include <windows.h>
  5. #include "ibase.h"
  6.  
  7. #define RESPBUF    256
  8.  
  9. void main (argc, argv)
  10. int    argc;
  11. char    *argv[];
  12. {
  13. char    *user = "duquette",
  14.         *pass = "duquette",
  15.         *role = "admins",
  16.         *newusr = "newuser",
  17.         *newpass = "newpass";
  18.  
  19. long    status [20];
  20. long    *svc_handle = NULL;
  21. char    svc_name[RESPBUF], spb_buff[RESPBUF], thd_buff[RESPBUF];
  22. char    respbuf[RESPBUF], *p = respbuf, *spb = spb_buff, *thd = thd_buff,*x;
  23. short    spblen, thdlen;
  24. int    i = 0, cnt=0;
  25. boolean finished = FALSE;
  26.  
  27. *spb++ = isc_spb_version;
  28. *spb++ = isc_spb_current_version;
  29.  
  30. *spb++ = isc_spb_user_name;
  31. *spb++ = strlen (user);
  32. for (x = user; *x;)
  33.   *spb++ = *x++;
  34.  
  35. *spb++ = isc_spb_password;
  36. *spb++ = strlen (pass);
  37. for (x = pass; *x;)
  38.   *spb++ = *x++;
  39.  
  40. sprintf (svc_name, "willaby:service_mgr");
  41.  
  42. spblen = spb - spb_buff;
  43.  
  44. if (isc_service_attach (status, 0, svc_name, &svc_handle, spblen, spb_buff))
  45.     {
  46.     isc_print_status (status);
  47.     exit (1);
  48.     }
  49.  
  50. *thd++ = isc_action_svc_add_user;
  51. *thd++ = isc_spb_sql_role_name;
  52. ADD_SPB_LENGTH (thd, strlen(role));
  53. for (x = role; *x;)
  54.   *thd++ = *x++;
  55.  
  56. *thd++ = isc_spb_sec_username;
  57. ADD_SPB_LENGTH (thd, strlen(newusr));
  58. for (x = newusr; *x;)
  59.   *thd++ = *x++;
  60.  
  61. *thd++ = isc_spb_sec_password;
  62. ADD_SPB_LENGTH (thd, strlen(newpass));
  63. for (x = newpass; *x;)
  64.   *thd++ = *x++;
  65.  
  66. *thd++ = isc_spb_sec_firstname;
  67. ADD_SPB_LENGTH (thd, strlen("firstname"));
  68. for (x = "firstname"; *x;)
  69.   *thd++ = *x++;
  70.  
  71. *thd++ = isc_spb_sec_lastname;
  72. ADD_SPB_LENGTH (thd, strlen("lastname"));
  73. for (x = "lastname"; *x;)
  74.   *thd++ = *x++;
  75.  
  76. thdlen = thd - thd_buff;
  77.  
  78. printf ("Attach succeed\n");
  79.  
  80. if (isc_service_start(status, &svc_handle, NULL, thdlen, thd_buff))
  81.     {
  82.     long *vector = status;
  83.     printf ("Unable to start service:\n");
  84.     while (isc_interprete (respbuf, &vector))
  85.         printf ("ERROR: %s\n", respbuf);
  86.     printf ("End of errors\n");
  87.     isc_service_detach (status, &svc_handle);
  88.     exit(1);
  89.     }
  90. printf ("Start succeed\n");
  91. do
  92.     {
  93.     char sendbuf[] = {isc_info_svc_line};
  94.     ISC_STATUS  loc_status[20], *stat = loc_status;
  95.     if (isc_service_query (status, &svc_handle, NULL, 0, NULL, sizeof (sendbuf), sendbuf, RESPBUF, respbuf))
  96.         {
  97.         isc_print_status (status);
  98.         isc_service_detach (status, &svc_handle);
  99.         exit(1);
  100.         }
  101.     
  102.     x = p = respbuf;
  103.     
  104.     if (*p++ == isc_info_svc_line)
  105.         {
  106.         ISC_USHORT len = 0, chTmp = 0;
  107.         
  108.         len = (ISC_USHORT)isc_vax_integer(p, sizeof(ISC_USHORT));
  109.         p += sizeof (ISC_USHORT);
  110.         if (!len)
  111.             if (*p ==  isc_info_data_not_ready)
  112.                 {
  113.                 printf ("no data available at this moment\n");
  114.                 continue;
  115.                 }
  116.             else
  117.                 {
  118.                 if (*p != isc_info_end)
  119.                     printf ("Format error ... <%d>\n", *p);
  120.                 break;
  121.                 }
  122.             for (chTmp = 0; chTmp < len; chTmp++)
  123.                 printf("%c",p[chTmp]);
  124.             p += len;
  125.             if (*p != isc_info_truncated && *p != isc_info_end)
  126.                 {
  127.                 printf ("Format error ... encountered <%d>\n", *p);
  128.                 break;
  129.                 }
  130.             else
  131.                 {
  132.                 //                printf ("\nisc_info_truncated  || isc_info_end\n");
  133.                 }
  134.         }
  135.     else
  136.         printf ("not a isc_info_svc_line, but %d\n", *x);
  137.     }
  138.     while (*x == isc_info_svc_line);
  139. isc_service_detach (status, &svc_handle);
  140. }