my_netware.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /*
  14.   Functions specific to netware
  15. */
  16. #include <mysys_priv.h>
  17. #ifdef __NETWARE__
  18.   #include <string.h>
  19.   #include <library.h>
  20. /*
  21.   PMUserLicenseRequest is an API exported by the polimgr.nlm
  22.   (loaded by the NetWare OS when it comes up) for use by other
  23.   NLM-based NetWare products/services.
  24.   PMUserLicenseRequest provides a couple of functions:
  25.   1) it will optionally request a User license or ensure that
  26.   one already exists for the specified User in userInfo
  27.   2) it utilizes the NetWare usage metering service to
  28.   record usage information about your product/service.
  29. */
  30. long PMMeteredUsageRequest
  31. (
  32.  /*
  33.    NDS distinguished name or IP address or ??.  asciiz string, e.g.
  34.    ".CN=Admin.O=this.T=MYTREE."
  35.  */
  36.  char *userInfo,
  37.  long infoType,                /* see defined values */
  38.  /*
  39.    string used to identify the calling service, used to index the
  40.    metered info e.g. "iPrint"
  41.  */
  42.  char *serviceID,
  43.  char tranAddrType,            /* type of address that follows */
  44.  char *tranAddr,               /* ptr to a 10-byte array */
  45.  long flags,                   /* see defined values */
  46.  /* NLS error code, if any.  NULL input is okay */
  47.  long *licRequestErrCode,
  48.  /*  meter service error code, if any.  NULL input is okay */
  49.  long *storeMeterInfoErrCode,
  50.  /*
  51.    error code from NLSMeter if
  52.    storeMeterInfoErrCode == PM_LICREQ_NLSMETERERROR.
  53.    NULL input is okay
  54.  */
  55.  long *NLSMeterErrCode
  56. );
  57. typedef long(*PMUR)(const char*, long, const char*, char,
  58.         const char*, long, long*, long*, long*);
  59. /* infoType */
  60. /* indicates that the info in the userInfo param is an NDS user */
  61. #define PM_USERINFO_TYPE_NDS      1
  62. /* indicates that the info in the userInfo param is NOT an NDS user */
  63. #define PM_USERINFO_TYPE_ADDRESS  2
  64. /* Flags */
  65. /*
  66.   Tells the service that it should not check to see if the NDS user
  67.   contained in the userInfo param has a NetWare User License - just
  68.   record metering information; this is ignored if infoType !=
  69.   PM_USERINFO_TYPE_NDS
  70. */
  71. #define PM_FLAGS_METER_ONLY         0x0000001
  72. /*
  73.   Indicates that the values in the userInfo and serviceID parameters
  74.   are unicode strings, so that the metering service bypasses
  75.   converting these to unicode (again)
  76. */
  77. #define PM_LICREQ_ALREADY_UNICODE   0x0000002
  78. /*
  79.   Useful only if infoType is PM_USERINFO_TYPE_NDS - indicates a "no
  80.   stop" policy of the calling service
  81. */
  82. #define PM_LICREQ_ALWAYS_METER      0x0000004
  83. /*
  84.   net Address Types - system-defined types of net addresses that can
  85.   be used in the tranAddrType field
  86. */
  87. #define NLS_TRAN_TYPE_IPX     0x00000001    /* An IPX address */
  88. #define NLS_TRAN_TYPE_IP      0x00000008    /* An IP address */
  89. #define NLS_ADDR_TYPE_MAC     0x000000F1    /* a MAC address */
  90. /*
  91.   Net Address Sizes - lengths that correspond to the tranAddrType
  92.   field (just fyi)
  93. */
  94. #define NLS_IPX_ADDR_SIZE   10    /* the size of an IPX address */
  95. #define NLS_IP_ADDR_SIZE    4     /* the size of an IP address */
  96. #define NLS_MAC_ADDR_SIZE   6     /* the size of a MAC address */
  97. void netware_reg_user(const char *ip, const char *user,
  98.       const char *application)
  99. {
  100.   PMUR usage_request;
  101.   long licRequestErrCode      = 0;
  102.   long storeMeterInfoErrCode  = 0;
  103.   long nlsMeterErrCode        = 0;
  104.   /* import the symbol */
  105.   usage_request= ((PMUR)ImportPublicObject(getnlmhandle(),
  106.    "PMMeteredUsageRequest"));
  107.   if (usage_request != NULL)
  108.   {
  109.     unsigned long iaddr;
  110.     char addr[NLS_IPX_ADDR_SIZE];
  111.     /* create address */
  112.     iaddr = htonl(inet_addr(ip));
  113.     bzero(addr, NLS_IPX_ADDR_SIZE);
  114.     memcpy(addr, &iaddr, NLS_IP_ADDR_SIZE);
  115.     /* call to NLS */
  116.     usage_request(user,
  117.   PM_USERINFO_TYPE_ADDRESS,
  118.   application,
  119.   NLS_TRAN_TYPE_IP,
  120.   addr,
  121.   PM_FLAGS_METER_ONLY,
  122.   &licRequestErrCode,
  123.   &storeMeterInfoErrCode,
  124.   &nlsMeterErrCode);
  125.     /* release symbol */
  126.     UnImportPublicObject(getnlmhandle(), "PMMeteredUsageRequest");
  127.   }
  128. }
  129. #endif /* __NETWARE__ */