1 /* 2 * Please do not edit this file. 3 * It was generated using rpcgen. 4 */ 5 6 #include "kwarnd.h" 7 #include <stdio.h> 8 #include <stdlib.h> /* getenv, exit */ 9 #include <signal.h> 10 #include <sys/types.h> 11 #include <memory.h> 12 #include <stropts.h> 13 #include <sys/resource.h> /* rlimit */ 14 #include <syslog.h> 15 16 #ifdef DEBUG 17 #define RPC_SVC_FG 18 #endif 19 20 #define _RPCSVC_CLOSEDOWN 120 21 /* 22 * Copyright 1990-2002 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 27 28 #include <sys/types.h> 29 #include <sys/time.h> 30 #include <rpc/auth_sys.h> 31 #include <locale.h> 32 33 extern int _rpcpmstart; /* Started by a port monitor ? */ 34 35 /* States a server can be in wrt request */ 36 37 #define _IDLE 0 38 #define _SERVED 1 39 40 /* LINTED static unused if no main */ 41 static int _rpcsvcstate = _IDLE; /* Set when a request is serviced */ 42 static int _rpcsvccount = 0; /* Number of requests being serviced */ 43 mutex_t _svcstate_lock; /* lock for _rpcsvcstate, _rpcsvccount */ 44 45 #if defined(RPC_MSGOUT) 46 extern void RPC_MSGOUT(); 47 #else /* defined(RPC_MSGOUT) */ 48 static void 49 RPC_MSGOUT(fmt, msg) 50 char *fmt; 51 char *msg; 52 { 53 #ifdef RPC_SVC_FG 54 if (_rpcpmstart) 55 syslog(LOG_ERR, fmt, msg); 56 else { 57 (void) fprintf(stderr, fmt, msg); 58 (void) putc('\n', stderr); 59 } 60 #else 61 syslog(LOG_ERR, fmt, msg); 62 #endif 63 } 64 #endif /* defined(RPC_MSGOUT) */ 65 66 void 67 kwarnprog_1(rqstp, transp) 68 struct svc_req *rqstp; 69 register SVCXPRT *transp; 70 { 71 union { 72 kwarn_add_warning_arg kwarn_add_warning_1_arg; 73 kwarn_del_warning_arg kwarn_del_warning_1_arg; 74 } argument; 75 union { 76 kwarn_add_warning_res kwarn_add_warning_1_res; 77 kwarn_del_warning_res kwarn_del_warning_1_res; 78 } result; 79 bool_t retval; 80 bool_t (*_xdr_argument)(), (*_xdr_result)(); 81 bool_t (*local)(); 82 83 (void) mutex_lock(&_svcstate_lock); 84 _rpcsvccount++; 85 (void) mutex_unlock(&_svcstate_lock); 86 switch (rqstp->rq_proc) { 87 case NULLPROC: 88 (void) svc_sendreply(transp, xdr_void, 89 NULL); 90 (void) mutex_lock(&_svcstate_lock); 91 _rpcsvccount--; 92 _rpcsvcstate = _SERVED; 93 (void) mutex_unlock(&_svcstate_lock); 94 return; /* CSTYLED */ 95 96 case KWARN_ADD_WARNING: 97 _xdr_argument = xdr_kwarn_add_warning_arg; 98 _xdr_result = xdr_kwarn_add_warning_res; 99 local = (bool_t (*)()) 100 kwarn_add_warning_1_svc; 101 break; 102 103 case KWARN_DEL_WARNING: 104 _xdr_argument = xdr_kwarn_del_warning_arg; 105 _xdr_result = xdr_kwarn_del_warning_res; 106 local = (bool_t (*)()) 107 kwarn_del_warning_1_svc; 108 break; 109 110 default: 111 svcerr_noproc(transp); 112 (void) mutex_lock(&_svcstate_lock); 113 _rpcsvccount--; 114 _rpcsvcstate = _SERVED; 115 (void) mutex_unlock(&_svcstate_lock); 116 return; /* CSTYLED */ 117 } 118 (void) memset((char *)&argument, 0, sizeof (argument)); 119 if (!svc_getargs(transp, _xdr_argument, (caddr_t)&argument)) { 120 svcerr_decode(transp); 121 (void) mutex_lock(&_svcstate_lock); 122 _rpcsvccount--; 123 _rpcsvcstate = _SERVED; 124 (void) mutex_unlock(&_svcstate_lock); 125 return; /* CSTYLED */ 126 } 127 retval = (bool_t)(*local)(&argument, &result, rqstp); 128 if (_xdr_result && retval > 0 && 129 !svc_sendreply(transp, _xdr_result, (char *)&result)) { 130 svcerr_systemerr(transp); 131 } 132 if (!svc_freeargs(transp, _xdr_argument, (caddr_t)&argument)) { 133 RPC_MSGOUT("%s", 134 "unable to free arguments"); 135 exit(1); 136 } 137 if (_xdr_result != NULL) { 138 if (!kwarnprog_1_freeresult(transp, _xdr_result, 139 (caddr_t)&result)) 140 RPC_MSGOUT("%s", 141 "unable to free results"); 142 143 } 144 (void) mutex_lock(&_svcstate_lock); 145 _rpcsvccount--; 146 _rpcsvcstate = _SERVED; 147 (void) mutex_unlock(&_svcstate_lock); 148 return; /* CSTYLED */ 149 } 150