Trusted Solaris 開発ガイド

遠隔手続き

遠隔手続きは、コマンド行引数からユーザー ID を受け取り、その入力を 2 倍にした結果をクライアントに送信し、応答を出力して終了します。

static void
 proc_1(struct svc_req *rqstp, SVCXPRT *handlep)
 {
 	int input;
 	int result;
 	uid_t *uidp;

 	switch(rqstp->rq_proc) {
 	case NULLPROC:
 			svc_sendreply(handlep, xdr_void, NULL);
 			break;
 	case RPC_TEST_DOUBLE1:
 			if (!svc_getargs(handlep, xdr_int, (caddr_t) &input)) {
 				fprintf(stderr, "Error from svc_getargs¥n");
 				svcerr_systemerr(handlep);
 			}
 			uidp = (uid_t *) t6get_attr(T6_UID,
 				handlep->xp_tsol_incoming_attrsp);
 			if (uidp == NULL)
 				fprintf(stderr, "Error from t6get_attr.¥n");
 			else printf("Client's UID is %d¥n", *uidp);
 			result = 2 * input;
 			if (!svc_sendreply(handlep, xdr_int, (caddr_t) &result)) {
 				fprintf(stderr, "Error from sendreply¥n");
 				svcerr_systemerr(handlep);
 			}
 			svc_freeargs(handlep, xdr_int, (caddr_t) &input);
 			break;

 	default:
 			fprintf(stderr, "Call to unexpected procedure number %d¥n",
 				rqstp->rq_proc);
 		svcerr_noproc(handlep);
 		break;
 	}
 }