14520Snw141292 /* 24520Snw141292 * CDDL HEADER START 34520Snw141292 * 44520Snw141292 * The contents of this file are subject to the terms of the 54520Snw141292 * Common Development and Distribution License (the "License"). 64520Snw141292 * You may not use this file except in compliance with the License. 74520Snw141292 * 84520Snw141292 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 94520Snw141292 * or http://www.opensolaris.org/os/licensing. 104520Snw141292 * See the License for the specific language governing permissions 114520Snw141292 * and limitations under the License. 124520Snw141292 * 134520Snw141292 * When distributing Covered Code, include this CDDL HEADER in each 144520Snw141292 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 154520Snw141292 * If applicable, add the following below this CDDL HEADER, with the 164520Snw141292 * fields enclosed by brackets "[]" replaced with your own identifying 174520Snw141292 * information: Portions Copyright [yyyy] [name of copyright owner] 184520Snw141292 * 194520Snw141292 * CDDL HEADER END 204520Snw141292 */ 214520Snw141292 /* 22*11963SAfshin.Ardakani@Sun.COM * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 234520Snw141292 * Use is subject to license terms. 244520Snw141292 */ 254520Snw141292 264520Snw141292 /* 2710122SJordan.Brown@Sun.COM * Please do not edit this file. 2810122SJordan.Brown@Sun.COM * It was generated using rpcgen. 2910122SJordan.Brown@Sun.COM * Edit idmap_prot.x and rebuild this file with 3010122SJordan.Brown@Sun.COM * rpcgen -CMNm -o idmap_prot_svc.c.new ../../../uts/common/rpcsvc/idmap_prot.x 3110122SJordan.Brown@Sun.COM * then merge as required. A recent version of rpcgen is needed to 3210122SJordan.Brown@Sun.COM * produce this exact file; when the revised rpcgen is available in the 3310122SJordan.Brown@Sun.COM * build environment this file can be built automatically. 344520Snw141292 */ 354520Snw141292 3610122SJordan.Brown@Sun.COM #include "../../../uts/common/rpcsvc/idmap_prot.h" 3710122SJordan.Brown@Sun.COM #include <stdio.h> 3810122SJordan.Brown@Sun.COM #include <stdlib.h> /* getenv, exit */ 394520Snw141292 #include <signal.h> 4010122SJordan.Brown@Sun.COM #include <rpc/pmap_clnt.h> /* for pmap_unset */ 4110122SJordan.Brown@Sun.COM #include <string.h> /* strcmp */ 4210122SJordan.Brown@Sun.COM #include <unistd.h> /* setsid */ 4310122SJordan.Brown@Sun.COM #include <sys/types.h> 4410122SJordan.Brown@Sun.COM #include <memory.h> 4510122SJordan.Brown@Sun.COM #include <stropts.h> 4610122SJordan.Brown@Sun.COM #include <sys/resource.h> /* rlimit */ 4710122SJordan.Brown@Sun.COM #include <syslog.h> 4810122SJordan.Brown@Sun.COM 4910122SJordan.Brown@Sun.COM #ifndef SIG_PF 5010122SJordan.Brown@Sun.COM #define SIG_PF void(*)(int) 5110122SJordan.Brown@Sun.COM #endif 5210122SJordan.Brown@Sun.COM 5310122SJordan.Brown@Sun.COM #ifdef DEBUG 5410122SJordan.Brown@Sun.COM #define RPC_SVC_FG 5510122SJordan.Brown@Sun.COM #endif 5610122SJordan.Brown@Sun.COM 5710122SJordan.Brown@Sun.COM #define _RPCSVC_CLOSEDOWN 120 5810122SJordan.Brown@Sun.COM extern int _rpcpmstart; /* Started by a port monitor ? */ 5910122SJordan.Brown@Sun.COM 6010122SJordan.Brown@Sun.COM /* States a server can be in wrt request */ 614520Snw141292 6210122SJordan.Brown@Sun.COM #define _IDLE 0 6310122SJordan.Brown@Sun.COM #define _SERVED 1 6410122SJordan.Brown@Sun.COM 6510122SJordan.Brown@Sun.COM /* LINTED static unused if no main */ 6610122SJordan.Brown@Sun.COM static int _rpcsvcstate = _IDLE; /* Set when a request is serviced */ 6710122SJordan.Brown@Sun.COM static int _rpcsvccount = 0; /* Number of requests being serviced */ 6810122SJordan.Brown@Sun.COM mutex_t _svcstate_lock; /* lock for _rpcsvcstate, _rpcsvccount */ 6910122SJordan.Brown@Sun.COM 7010122SJordan.Brown@Sun.COM #if defined(RPC_MSGOUT) 7110122SJordan.Brown@Sun.COM extern void RPC_MSGOUT(const char *, ...); 7210122SJordan.Brown@Sun.COM #else /* defined(RPC_MSGOUT) */ 7310122SJordan.Brown@Sun.COM static void 7410122SJordan.Brown@Sun.COM RPC_MSGOUT(const char *fmt, char *msg) 7510122SJordan.Brown@Sun.COM { 7610122SJordan.Brown@Sun.COM #ifdef RPC_SVC_FG 7710122SJordan.Brown@Sun.COM if (_rpcpmstart) 7810122SJordan.Brown@Sun.COM syslog(LOG_ERR, fmt, msg); 7910122SJordan.Brown@Sun.COM else { 8010122SJordan.Brown@Sun.COM (void) fprintf(stderr, fmt, msg); 8110122SJordan.Brown@Sun.COM (void) putc('\n', stderr); 8210122SJordan.Brown@Sun.COM } 8310122SJordan.Brown@Sun.COM #else 8410122SJordan.Brown@Sun.COM syslog(LOG_ERR, fmt, msg); 8510122SJordan.Brown@Sun.COM #endif 8610122SJordan.Brown@Sun.COM } 8710122SJordan.Brown@Sun.COM #endif /* defined(RPC_MSGOUT) */ 884520Snw141292 894520Snw141292 /* ARGSUSED */ 904520Snw141292 int 9110122SJordan.Brown@Sun.COM _idmap_null_1( 9210122SJordan.Brown@Sun.COM void *argp, 9310122SJordan.Brown@Sun.COM void *result, 9410122SJordan.Brown@Sun.COM struct svc_req *rqstp) 954520Snw141292 { 964520Snw141292 return (idmap_null_1_svc(result, rqstp)); 974520Snw141292 } 984520Snw141292 994520Snw141292 int 10010122SJordan.Brown@Sun.COM _idmap_get_mapped_ids_1( 10110122SJordan.Brown@Sun.COM idmap_mapping_batch *argp, 10210122SJordan.Brown@Sun.COM idmap_ids_res *result, 10310122SJordan.Brown@Sun.COM struct svc_req *rqstp) 1045696Snw141292 { 1054520Snw141292 return (idmap_get_mapped_ids_1_svc(*argp, result, rqstp)); 1064520Snw141292 } 1074520Snw141292 1084520Snw141292 int 10910122SJordan.Brown@Sun.COM _idmap_list_mappings_1( 11010122SJordan.Brown@Sun.COM idmap_list_mappings_1_argument *argp, 11110122SJordan.Brown@Sun.COM idmap_mappings_res *result, 11210122SJordan.Brown@Sun.COM struct svc_req *rqstp) 1135696Snw141292 { 11410122SJordan.Brown@Sun.COM return (idmap_list_mappings_1_svc( 11510122SJordan.Brown@Sun.COM argp->lastrowid, 11610122SJordan.Brown@Sun.COM argp->limit, 11710122SJordan.Brown@Sun.COM argp->flag, 11810122SJordan.Brown@Sun.COM result, rqstp)); 1194520Snw141292 } 1204520Snw141292 1214520Snw141292 int 12210122SJordan.Brown@Sun.COM _idmap_list_namerules_1( 12310122SJordan.Brown@Sun.COM idmap_list_namerules_1_argument *argp, 12410122SJordan.Brown@Sun.COM idmap_namerules_res *result, 12510122SJordan.Brown@Sun.COM struct svc_req *rqstp) 1265696Snw141292 { 12710122SJordan.Brown@Sun.COM return (idmap_list_namerules_1_svc( 12810122SJordan.Brown@Sun.COM argp->rule, 12910122SJordan.Brown@Sun.COM argp->lastrowid, 13010122SJordan.Brown@Sun.COM argp->limit, 13110122SJordan.Brown@Sun.COM result, rqstp)); 1324520Snw141292 } 1334520Snw141292 1344520Snw141292 int 13510122SJordan.Brown@Sun.COM _idmap_update_1( 13610122SJordan.Brown@Sun.COM idmap_update_batch *argp, 13710122SJordan.Brown@Sun.COM idmap_update_res *result, 13810122SJordan.Brown@Sun.COM struct svc_req *rqstp) 1395696Snw141292 { 14010122SJordan.Brown@Sun.COM return (idmap_update_1_svc(*argp, result, rqstp)); 1414520Snw141292 } 1424520Snw141292 1434520Snw141292 int 14410122SJordan.Brown@Sun.COM _idmap_get_mapped_id_by_name_1( 14510122SJordan.Brown@Sun.COM idmap_mapping *argp, 14610122SJordan.Brown@Sun.COM idmap_mappings_res *result, 14710122SJordan.Brown@Sun.COM struct svc_req *rqstp) 1485696Snw141292 { 1494520Snw141292 return (idmap_get_mapped_id_by_name_1_svc(*argp, result, rqstp)); 1504520Snw141292 } 1514520Snw141292 1526616Sdm199847 int 15310122SJordan.Brown@Sun.COM _idmap_get_prop_1( 15410122SJordan.Brown@Sun.COM idmap_prop_type *argp, 15510122SJordan.Brown@Sun.COM idmap_prop_res *result, 15610122SJordan.Brown@Sun.COM struct svc_req *rqstp) 1576616Sdm199847 { 1586616Sdm199847 return (idmap_get_prop_1_svc(*argp, result, rqstp)); 1596616Sdm199847 } 1606616Sdm199847 16110122SJordan.Brown@Sun.COM int 16210122SJordan.Brown@Sun.COM _directory_get_common_1( 16310122SJordan.Brown@Sun.COM directory_get_common_1_argument *argp, 16410122SJordan.Brown@Sun.COM directory_results_rpc *result, 16510122SJordan.Brown@Sun.COM struct svc_req *rqstp) 16610122SJordan.Brown@Sun.COM { 16710122SJordan.Brown@Sun.COM return (directory_get_common_1_svc( 16810122SJordan.Brown@Sun.COM argp->ids, 16910122SJordan.Brown@Sun.COM argp->types, 17010122SJordan.Brown@Sun.COM argp->attrs, 17110122SJordan.Brown@Sun.COM result, rqstp)); 17210122SJordan.Brown@Sun.COM } 1734520Snw141292 174*11963SAfshin.Ardakani@Sun.COM int 175*11963SAfshin.Ardakani@Sun.COM _idmap_flush_1( 176*11963SAfshin.Ardakani@Sun.COM idmap_flush_op *argp, 177*11963SAfshin.Ardakani@Sun.COM idmap_retcode *result, 178*11963SAfshin.Ardakani@Sun.COM struct svc_req *rqstp) 179*11963SAfshin.Ardakani@Sun.COM { 180*11963SAfshin.Ardakani@Sun.COM return (idmap_flush_1_svc(*argp, result, rqstp)); 181*11963SAfshin.Ardakani@Sun.COM } 182*11963SAfshin.Ardakani@Sun.COM 1834520Snw141292 void 1844520Snw141292 idmap_prog_1(struct svc_req *rqstp, register SVCXPRT *transp) 1854520Snw141292 { 1864520Snw141292 union { 1874520Snw141292 idmap_mapping_batch idmap_get_mapped_ids_1_arg; 1884520Snw141292 idmap_list_mappings_1_argument idmap_list_mappings_1_arg; 1894520Snw141292 idmap_list_namerules_1_argument idmap_list_namerules_1_arg; 1904520Snw141292 idmap_update_batch idmap_update_1_arg; 1914520Snw141292 idmap_mapping idmap_get_mapped_id_by_name_1_arg; 1926616Sdm199847 idmap_prop_type idmap_get_prop_1_arg; 19310122SJordan.Brown@Sun.COM directory_get_common_1_argument directory_get_common_1_arg; 194*11963SAfshin.Ardakani@Sun.COM idmap_flush_op idmap_flush_1_arg; 1954520Snw141292 } argument; 1964520Snw141292 union { 1974520Snw141292 idmap_ids_res idmap_get_mapped_ids_1_res; 1984520Snw141292 idmap_mappings_res idmap_list_mappings_1_res; 1994520Snw141292 idmap_namerules_res idmap_list_namerules_1_res; 2005064Sdm199847 idmap_update_res idmap_update_1_res; 2014520Snw141292 idmap_mappings_res idmap_get_mapped_id_by_name_1_res; 2026616Sdm199847 idmap_prop_res idmap_get_prop_1_res; 20310122SJordan.Brown@Sun.COM directory_results_rpc directory_get_common_1_res; 204*11963SAfshin.Ardakani@Sun.COM idmap_retcode idmap_flush_1_res; 2054520Snw141292 } result; 2064520Snw141292 bool_t retval; 2074520Snw141292 xdrproc_t _xdr_argument, _xdr_result; 2084520Snw141292 bool_t (*local)(char *, void *, struct svc_req *); 2094520Snw141292 2104520Snw141292 (void) mutex_lock(&_svcstate_lock); 2114520Snw141292 _rpcsvccount++; 2124520Snw141292 (void) mutex_unlock(&_svcstate_lock); 2134520Snw141292 switch (rqstp->rq_proc) { 2144520Snw141292 case IDMAP_NULL: 21510122SJordan.Brown@Sun.COM _xdr_argument = (xdrproc_t) 21610122SJordan.Brown@Sun.COM xdr_void; 21710122SJordan.Brown@Sun.COM _xdr_result = (xdrproc_t) 21810122SJordan.Brown@Sun.COM xdr_void; 2194520Snw141292 local = (bool_t (*) (char *, void *, struct svc_req *)) 2204520Snw141292 _idmap_null_1; 2214520Snw141292 break; 2224520Snw141292 2234520Snw141292 case IDMAP_GET_MAPPED_IDS: 22410122SJordan.Brown@Sun.COM _xdr_argument = (xdrproc_t) 22510122SJordan.Brown@Sun.COM xdr_idmap_mapping_batch; 22610122SJordan.Brown@Sun.COM _xdr_result = (xdrproc_t) 22710122SJordan.Brown@Sun.COM xdr_idmap_ids_res; 2284520Snw141292 local = (bool_t (*) (char *, void *, struct svc_req *)) 2294520Snw141292 _idmap_get_mapped_ids_1; 2304520Snw141292 break; 2314520Snw141292 2324520Snw141292 case IDMAP_LIST_MAPPINGS: 23310122SJordan.Brown@Sun.COM _xdr_argument = (xdrproc_t) 23410122SJordan.Brown@Sun.COM xdr_idmap_list_mappings_1_argument; 23510122SJordan.Brown@Sun.COM _xdr_result = (xdrproc_t) 23610122SJordan.Brown@Sun.COM xdr_idmap_mappings_res; 2374520Snw141292 local = (bool_t (*) (char *, void *, struct svc_req *)) 2384520Snw141292 _idmap_list_mappings_1; 2394520Snw141292 break; 2404520Snw141292 2414520Snw141292 case IDMAP_LIST_NAMERULES: 24210122SJordan.Brown@Sun.COM _xdr_argument = (xdrproc_t) 24310122SJordan.Brown@Sun.COM xdr_idmap_list_namerules_1_argument; 24410122SJordan.Brown@Sun.COM _xdr_result = (xdrproc_t) 24510122SJordan.Brown@Sun.COM xdr_idmap_namerules_res; 2464520Snw141292 local = (bool_t (*) (char *, void *, struct svc_req *)) 2474520Snw141292 _idmap_list_namerules_1; 2484520Snw141292 break; 2494520Snw141292 2504520Snw141292 case IDMAP_UPDATE: 25110122SJordan.Brown@Sun.COM _xdr_argument = (xdrproc_t) 25210122SJordan.Brown@Sun.COM xdr_idmap_update_batch; 25310122SJordan.Brown@Sun.COM _xdr_result = (xdrproc_t) 25410122SJordan.Brown@Sun.COM xdr_idmap_update_res; 2554520Snw141292 local = (bool_t (*) (char *, void *, struct svc_req *)) 2564520Snw141292 _idmap_update_1; 2574520Snw141292 break; 2584520Snw141292 2594520Snw141292 case IDMAP_GET_MAPPED_ID_BY_NAME: 26010122SJordan.Brown@Sun.COM _xdr_argument = (xdrproc_t) 26110122SJordan.Brown@Sun.COM xdr_idmap_mapping; 26210122SJordan.Brown@Sun.COM _xdr_result = (xdrproc_t) 26310122SJordan.Brown@Sun.COM xdr_idmap_mappings_res; 2644520Snw141292 local = (bool_t (*) (char *, void *, struct svc_req *)) 2654520Snw141292 _idmap_get_mapped_id_by_name_1; 2664520Snw141292 break; 2674520Snw141292 2686616Sdm199847 case IDMAP_GET_PROP: 26910122SJordan.Brown@Sun.COM _xdr_argument = (xdrproc_t) 27010122SJordan.Brown@Sun.COM xdr_idmap_prop_type; 27110122SJordan.Brown@Sun.COM _xdr_result = (xdrproc_t) 27210122SJordan.Brown@Sun.COM xdr_idmap_prop_res; 2736616Sdm199847 local = (bool_t (*) (char *, void *, struct svc_req *)) 2746616Sdm199847 _idmap_get_prop_1; 2756616Sdm199847 break; 2766616Sdm199847 27710122SJordan.Brown@Sun.COM case DIRECTORY_GET_COMMON: 27810122SJordan.Brown@Sun.COM _xdr_argument = (xdrproc_t) 27910122SJordan.Brown@Sun.COM xdr_directory_get_common_1_argument; 28010122SJordan.Brown@Sun.COM _xdr_result = (xdrproc_t) 28110122SJordan.Brown@Sun.COM xdr_directory_results_rpc; 28210122SJordan.Brown@Sun.COM local = (bool_t (*) (char *, void *, struct svc_req *)) 28310122SJordan.Brown@Sun.COM _directory_get_common_1; 28410122SJordan.Brown@Sun.COM break; 28510122SJordan.Brown@Sun.COM 286*11963SAfshin.Ardakani@Sun.COM case IDMAP_FLUSH: 287*11963SAfshin.Ardakani@Sun.COM _xdr_argument = (xdrproc_t) 288*11963SAfshin.Ardakani@Sun.COM xdr_idmap_flush_op; 289*11963SAfshin.Ardakani@Sun.COM _xdr_result = (xdrproc_t) 290*11963SAfshin.Ardakani@Sun.COM xdr_idmap_retcode; 291*11963SAfshin.Ardakani@Sun.COM local = (bool_t (*) (char *, void *, struct svc_req *)) 292*11963SAfshin.Ardakani@Sun.COM _idmap_flush_1; 293*11963SAfshin.Ardakani@Sun.COM break; 294*11963SAfshin.Ardakani@Sun.COM 2954520Snw141292 default: 2964520Snw141292 svcerr_noproc(transp); 2974520Snw141292 (void) mutex_lock(&_svcstate_lock); 2984520Snw141292 _rpcsvccount--; 2994520Snw141292 _rpcsvcstate = _SERVED; 3004520Snw141292 (void) mutex_unlock(&_svcstate_lock); 30110122SJordan.Brown@Sun.COM return; /* CSTYLED */ 3024520Snw141292 } 3034520Snw141292 (void) memset((char *)&argument, 0, sizeof (argument)); 3044520Snw141292 if (!svc_getargs(transp, _xdr_argument, (caddr_t)&argument)) { 3054520Snw141292 svcerr_decode(transp); 3064520Snw141292 (void) mutex_lock(&_svcstate_lock); 3074520Snw141292 _rpcsvccount--; 3084520Snw141292 _rpcsvcstate = _SERVED; 3094520Snw141292 (void) mutex_unlock(&_svcstate_lock); 31010122SJordan.Brown@Sun.COM return; /* CSTYLED */ 3114520Snw141292 } 3124520Snw141292 retval = (bool_t)(*local)((char *)&argument, (void *)&result, rqstp); 31310122SJordan.Brown@Sun.COM if (_xdr_result && retval > 0 && 31410122SJordan.Brown@Sun.COM !svc_sendreply(transp, _xdr_result, (char *)&result)) { 3154520Snw141292 svcerr_systemerr(transp); 3164520Snw141292 } 3174520Snw141292 if (!svc_freeargs(transp, _xdr_argument, (caddr_t)&argument)) { 31810122SJordan.Brown@Sun.COM RPC_MSGOUT("%s", 31910122SJordan.Brown@Sun.COM "unable to free arguments"); 3204520Snw141292 exit(1); 3214520Snw141292 } 3224520Snw141292 if (_xdr_result != NULL) { 3234520Snw141292 if (!idmap_prog_1_freeresult(transp, _xdr_result, 3244520Snw141292 (caddr_t)&result)) 32510122SJordan.Brown@Sun.COM RPC_MSGOUT("%s", 32610122SJordan.Brown@Sun.COM "unable to free results"); 3274520Snw141292 3284520Snw141292 } 3294520Snw141292 (void) mutex_lock(&_svcstate_lock); 3304520Snw141292 _rpcsvccount--; 3314520Snw141292 _rpcsvcstate = _SERVED; 3324520Snw141292 (void) mutex_unlock(&_svcstate_lock); 33310122SJordan.Brown@Sun.COM return; /* CSTYLED */ 3344520Snw141292 } 335