/* * Please do not edit this file. * It was generated using rpcgen. */ #include "../../../lib/libads/common/ads_priv.h" #include #include /* getenv, exit */ #include #include /* for pmap_unset */ #include /* strcmp */ #include /* setsid */ #include #include #include #include /* rlimit */ #include #ifndef SIG_PF #define SIG_PF void(*)(int) #endif #ifdef DEBUG #define RPC_SVC_FG #endif #define _RPCSVC_CLOSEDOWN 120 /* * Copyright 2014 Nexenta Systems, Inc. All rights reserved. */ /* * from ads_priv.x * Active Directory Services (ADS) Private interface between * libads and the ADS deamon. (RPC over doors) */ /* * Server side stubs for the ADS API */ extern int _rpcpmstart; /* Started by a port monitor ? */ /* States a server can be in wrt request */ #define _IDLE 0 #define _SERVED 1 /* LINTED static unused if no main */ static int _rpcsvcstate = _IDLE; /* Set when a request is serviced */ static int _rpcsvccount = 0; /* Number of requests being serviced */ mutex_t _svcstate_lock; /* lock for _rpcsvcstate, _rpcsvccount */ #if defined(RPC_MSGOUT) extern void RPC_MSGOUT(const char *, ...); #else /* defined(RPC_MSGOUT) */ static void RPC_MSGOUT(const char *fmt, char *msg) { #ifdef RPC_SVC_FG if (_rpcpmstart) syslog(LOG_ERR, fmt, msg); else { (void) fprintf(stderr, fmt, msg); (void) putc('\n', stderr); } #else syslog(LOG_ERR, fmt, msg); #endif } #endif /* defined(RPC_MSGOUT) */ /* ARGSUSED */ int _adspriv_null_1( void *argp, void *result, struct svc_req *rqstp) { return (adspriv_null_1_svc(result, rqstp)); } int _adspriv_forcerediscovery_1( DsForceRediscoveryArgs *argp, int *result, struct svc_req *rqstp) { return (adspriv_forcerediscovery_1_svc(*argp, result, rqstp)); } int _adspriv_getdcname_1( DsGetDcNameArgs *argp, DsGetDcNameRes *result, struct svc_req *rqstp) { return (adspriv_getdcname_1_svc(*argp, result, rqstp)); } void adspriv_program_1(struct svc_req *rqstp, register SVCXPRT *transp) { union { DsForceRediscoveryArgs adspriv_forcerediscovery_1_arg; DsGetDcNameArgs adspriv_getdcname_1_arg; } argument; union { int adspriv_forcerediscovery_1_res; DsGetDcNameRes adspriv_getdcname_1_res; } result; bool_t retval; xdrproc_t _xdr_argument, _xdr_result; bool_t (*local)(char *, void *, struct svc_req *); (void) mutex_lock(&_svcstate_lock); _rpcsvccount++; (void) mutex_unlock(&_svcstate_lock); switch (rqstp->rq_proc) { case ADSPRIV_NULL: _xdr_argument = (xdrproc_t) xdr_void; _xdr_result = (xdrproc_t) xdr_void; local = (bool_t (*) (char *, void *, struct svc_req *)) _adspriv_null_1; break; case ADSPRIV_ForceRediscovery: _xdr_argument = (xdrproc_t) xdr_DsForceRediscoveryArgs; _xdr_result = (xdrproc_t) xdr_int; local = (bool_t (*) (char *, void *, struct svc_req *)) _adspriv_forcerediscovery_1; break; case ADSPRIV_GetDcName: _xdr_argument = (xdrproc_t) xdr_DsGetDcNameArgs; _xdr_result = (xdrproc_t) xdr_DsGetDcNameRes; local = (bool_t (*) (char *, void *, struct svc_req *)) _adspriv_getdcname_1; break; default: svcerr_noproc(transp); (void) mutex_lock(&_svcstate_lock); _rpcsvccount--; _rpcsvcstate = _SERVED; (void) mutex_unlock(&_svcstate_lock); return; /* CSTYLED */ } (void) memset((char *)&argument, 0, sizeof (argument)); if (!svc_getargs(transp, _xdr_argument, (caddr_t)&argument)) { svcerr_decode(transp); (void) mutex_lock(&_svcstate_lock); _rpcsvccount--; _rpcsvcstate = _SERVED; (void) mutex_unlock(&_svcstate_lock); return; /* CSTYLED */ } retval = (bool_t)(*local)((char *)&argument, (void *)&result, rqstp); if (_xdr_result && retval > 0 && !svc_sendreply(transp, _xdr_result, (char *)&result)) { svcerr_systemerr(transp); } if (!svc_freeargs(transp, _xdr_argument, (caddr_t)&argument)) { RPC_MSGOUT("%s", "unable to free arguments"); exit(1); } if (_xdr_result != NULL) { if (!adspriv_program_1_freeresult(transp, _xdr_result, (caddr_t)&result)) RPC_MSGOUT("%s", "unable to free results"); } (void) mutex_lock(&_svcstate_lock); _rpcsvccount--; _rpcsvcstate = _SERVED; (void) mutex_unlock(&_svcstate_lock); return; /* CSTYLED */ }