アクティブ ポリシーの例

ユーザがアクティブなポリシー式のパラメータ(param)フィールドで指定された組織単位に属する場合、この関数は true を返します。
casso127jpjp
ユーザがアクティブなポリシー式のパラメータ(
param
)フィールドで指定された組織単位に属する場合、この関数は true を返します。
<@ lib="SmAzAPI" func="activePolicy" param="Accounting" @>
*************************************************************
int SM_EXTERN activePolicy(
const Sm_Api_Context_t* lpApiContext,   
// the structure that provides API context
const Sm_Api_UserContext_t*  lpUserContext,  
// the structure that provides user context
const Sm_Api_RequestContext_t*  lpReqContext,   
// the structure that provides request context
const char* lpszParam,      
// the parameter string (null-terminated)
const int nBytesOutBuf,   
// the maximum size of the output buffer
char*  lpszOutBuf,     
// the output buffer to hold the null-terminated attribute value
const int  nBytesErrBuf,   
// the maximum size of the error message buffer
char* lpszErrBuf)     
// the output buffer to hold the null-terminated error message
{
/* User Context is required to use the functions like fGetProp, fSetProp.. */
if(!lpUserContext->bIsUserContext) {
   strncpy (lpszErrBuf, "No User Context ", nBytesErrBuf);
   lpszErrBuf[nBytesErrBuf-1] = '\0';
   return -1;
   }
/* Buffer to store all the organizational units user belongs to. */
char lpszOrgUnit[30];
memset(lpszOrgUnit, 0, sizeof(lpszOrgUnit));
/*
// Check to see if an organizational unit has been 
// entered in the parameter.
*/
if(lpszParam == NULL || strlen(lpszParam) == 0) 
   {
   strncpy (lpszErrBuf, "Organizational unit is not entered ",
            nBytesErrBuf);
   lpszErrBuf[nBytesErrBuf-1] = '\0';
   return -1;
   }
/* Get all the organizational units to which the user belongs. */
   int getResult = lpUserContext->fGetProp (
   lpUserContext->lpParam,
   "ou",         /* Attribute name */
   sizeof (lpszOrgUnit),lpszOrgUnit);
if (getResult < 0) 
   {
   strncpy (lpszErrBuf, 
       "Failed to get user password from user's profile attribute ",
       nBytesErrBuf);
   lpszErrBuf[nBytesErrBuf-1] = '\0';
   return -1;
   }
    else
    {
   /* Check if the user belongs to the organization unit that is
   requested. */
   if(strstr(lpszOrgUnit, lpszParam) != NULL)
      {
/*
   // Yes the user belongs to the organization unit
   // mentioned in the parameter field of active policy.
*/
      strncpy(lpszOutBuf, "true", nBytesOutBuf);
      lpszOutBuf[nBytesOutBuf-1] = '\0';
      return strlen(lpszOutBuf);
      }
      else
      {
      strncpy (lpszErrBuf, 
         "The user does not belong to the requested organizational unit ", 
         nBytesErrBuf);
      lpszErrBuf[nBytesErrBuf-1] = '\0';
      return -1;
      }
   }
    /* everything failed.... */
    return 0;
}