The following ILE C/400® program handles ODBC security by rejecting requests from certain users. It can be used as a shell for developing exit programs tailored for your operating environment.
/*-------------------------------------------------------------------------- * @@ss1s@@ Servers - Sample Exit Program * * Exit Point Name : QIBM_QZDA_INIT * * Description : The following ILE C/400 program handles * ODBC security by rejecting requests from * certain users. * It can be used as a shell for developing * exit programs tailored for your * operating environment. * * Input : A 1-byte return code value * X'F0' server rejects the request * anything else server allows the request * Structure containing information about the * request. The format used by this program * is ZDAI0100. *------------------------------------------------------------------------*/ /*------------------------------------------------------------------------ * Includes *------------------------------------------------------------------------*/ #include <string.h> /* string functions */ /*------------------------------------------------------------------------ * User Types *------------------------------------------------------------------------*/ typedef struct { /* Exit Point QIBM_QZDA_INIT format ZDAI0100 */ char User_profile_name[10]; /* Name of user profile calling server*/ char Server_identifier[10]; /* database server value (*SQL) */ char Exit_format_name[8]; /* User exit format name (ZDAI0100) */ long Requested_function; /* function being preformed (0) */ } ZDAI0100_fmt_t; /*------------------------------------------------------------------------ ------------------------------------------------------------------------*/ /*======================================================================== * Start of mainline executable code *========================================================================*/ int main (int argc, char *argv[]) { ZDAI0100_fmt_t input; /* input format record */ /* copy input parm into structure */ memcpy(&input, (ZDAI0100_fmt_t *)argv[2], 32); if /* if user name is GUEST */ ( memcmp(input.User_profile_name, "GUEST ", 10)==0 ) { /* set return code to reject the request. */ memcpy( argv[1], "0", 1); } else /* else user is someone else */ { /* set return code to allow the request. */ memcpy( argv[1], "1", 1); } } /* End of mainline executable code */