servinfo.c revision eb1a34638eba7c5add1421327f3eb225a8ea7518
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * CDDL HEADER START
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * The contents of this file are subject to the terms of the
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * Common Development and Distribution License (the "License").
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * You may not use this file except in compliance with the License.
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * See the License for the specific language governing permissions
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * and limitations under the License.
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * When distributing Covered Code, include this CDDL HEADER in each
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * If applicable, add the following below this CDDL HEADER, with the
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * fields enclosed by brackets "[]" replaced with your own identifying
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * information: Portions Copyright [yyyy] [name of copyright owner]
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * CDDL HEADER END
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * Use is subject to license terms.
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * This file delivers /usr/lib/servinfo which provides description for
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * IANA and running RPC services. Given a IANA name or RPC program name
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * or number, the program uses getservbyname(3SOCKET) and rpcbind(3NSL)
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * to obtain port and proto information for the specified service.
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen#endif /* TEXT_DOMAIN */
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen#define NETID_LEN 12 /* length for a netid or 2^16 port value */
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen (void) fprintf(stderr, gettext("Usage: %s [-R] [-Pp] [-tu[6]] "
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen while (*p != '.') {
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * If the first dot hasn't been seen, it's a
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * malformed universal address.
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen port = port | strtol(dot + 1, (char **)NULL, 10);
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyensvc_getrpcinfo(char *sname, char *sproto, int options)
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen rpc = (struct rpcent *)getrpcbynumber(prognum);
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * If an entry doesn't exist, it could be a running program
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * without a registered RPC entry.
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen (void) fprintf(stderr, gettext("setnetconfig failed\n"));
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen (void) fprintf(stderr, gettext("getnetconfig failed\n"));
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen if ((blist = (struct rpcblist *)rpcb_getmaps(nconf, "localhost"))
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen for (; blist != NULL; blist = blist->rpcb_next) {
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen if (strcmp(blist->rpcb_map.r_netid, sproto) != 0)
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen rpc_port = uaddr2port(blist->rpcb_map.r_addr);
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen (void) printf("Program %ld\n", blist->rpcb_map.r_prog);
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen (void) printf("Protocol %s\n", blist->rpcb_map.r_netid);
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen (void) printf("Version %ld\n", blist->rpcb_map.r_vers);
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen (void) snprintf(buf, sizeof (buf), "%-7ld ", rpc_port);
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen if (strstr(line, buf) || strlen(buf) > line_len)
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * Print the concatenated output if options is PROTO or PORT.
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen while ((c = getopt(argc, argv, "s:PplRtu6?")) != -1) {
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen * Specified service is an RPC service.
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen return (svc_getrpcinfo(sname, sproto, options));
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen if ((service = getservbyname(sname, sproto)) == NULL) {
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen "Failed to get information for %s\n"), sname);
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen (void) printf("Protocol %s\n", service->s_proto);
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen (void) printf("Port %d\n", htons(service->s_port));
eb1a34638eba7c5add1421327f3eb225a8ea7518Truong Nguyen (void) printf("%d\n", htons(service->s_port));