1 0 stevel /* 2 0 stevel * CDDL HEADER START 3 0 stevel * 4 0 stevel * The contents of this file are subject to the terms of the 5 0 stevel * Common Development and Distribution License, Version 1.0 only 6 0 stevel * (the "License"). You may not use this file except in compliance 7 0 stevel * with the License. 8 0 stevel * 9 0 stevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 0 stevel * or http://www.opensolaris.org/os/licensing. 11 0 stevel * See the License for the specific language governing permissions 12 0 stevel * and limitations under the License. 13 0 stevel * 14 0 stevel * When distributing Covered Code, include this CDDL HEADER in each 15 0 stevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 0 stevel * If applicable, add the following below this CDDL HEADER, with the 17 0 stevel * fields enclosed by brackets "[]" replaced with your own identifying 18 0 stevel * information: Portions Copyright [yyyy] [name of copyright owner] 19 0 stevel * 20 0 stevel * CDDL HEADER END 21 0 stevel */ 22 0 stevel /* 23 0 stevel * Copyright (c) 1991, 1999 by Sun Microsystems, Inc. 24 0 stevel * All rights reserved. 25 0 stevel */ 26 0 stevel 27 0 stevel #ident "%Z%%M% %I% %E% SMI" /* SunOS */ 28 0 stevel 29 0 stevel #include <sys/types.h> 30 0 stevel #include <sys/errno.h> 31 0 stevel #include <setjmp.h> 32 0 stevel #include <string.h> 33 0 stevel 34 0 stevel #include <sys/socket.h> 35 0 stevel #include <sys/sockio.h> 36 0 stevel #include <sys/tiuser.h> 37 0 stevel #include <net/if.h> 38 0 stevel #include <netinet/in_systm.h> 39 0 stevel #include <netinet/in.h> 40 0 stevel #include <rpc/types.h> 41 0 stevel #include <rpc/xdr.h> 42 0 stevel #include <rpc/auth.h> 43 0 stevel #include <rpc/clnt.h> 44 0 stevel #include <rpc/rpc_msg.h> 45 0 stevel #include <rpcsvc/yp_prot.h> 46 0 stevel #include "snoop.h" 47 0 stevel 48 0 stevel extern char *dlc_header; 49 0 stevel extern jmp_buf xdr_err; 50 0 stevel char *ypbind_error(); 51 0 stevel char *sum_ypxfrstat(); 52 0 stevel char *sum_ypmaplist(); 53 0 stevel void detail_ypmaplist(); 54 0 stevel 55 0 stevel static void niscall(int); 56 0 stevel static void nisreply(int); 57 0 stevel static int detail_ypstat(void); 58 0 stevel static int sum_ypstat(char *); 59 0 stevel 60 0 stevel /* 61 0 stevel * Defines missing from 5.0 yp_prot.h 62 0 stevel */ 63 0 stevel #define YPBINDPROG ((ulong_t)100007) 64 0 stevel #define YPBINDVERS ((ulong_t)2) 65 0 stevel #define YPBINDVERS_ORIG ((ulong_t)1) 66 0 stevel 67 0 stevel /* Procedure symbols */ 68 0 stevel 69 0 stevel #define YPBINDPROC_NULL ((ulong_t)0) 70 0 stevel #define YPBINDPROC_DOMAIN ((ulong_t)1) 71 0 stevel #define YPBINDPROC_SETDOM ((ulong_t)2) 72 0 stevel 73 0 stevel #define YPBIND_ERR_ERR 1 /* Internal error */ 74 0 stevel #define YPBIND_ERR_NOSERV 2 /* No bound server for passed domain */ 75 0 stevel #define YPBIND_ERR_RESC 3 /* System resource allocation failure */ 76 0 stevel 77 0 stevel 78 0 stevel static char *procnames_bind_short[] = { 79 0 stevel "NULL", /* 0 */ 80 0 stevel "DOMAIN", /* 1 */ 81 0 stevel "SETDOMAIN", /* 2 */ 82 0 stevel }; 83 0 stevel 84 0 stevel static char *procnames_bind_long[] = { 85 0 stevel "Null procedure", /* 0 */ 86 0 stevel "Get domain name", /* 1 */ 87 0 stevel "Set domain name", /* 2 */ 88 0 stevel }; 89 0 stevel 90 0 stevel static char *procnames_short[] = { 91 0 stevel "NULL", /* 0 */ 92 0 stevel "DOMAIN", /* 1 */ 93 0 stevel "DOMAIN_NONACK", /* 2 */ 94 0 stevel "MATCH", /* 3 */ 95 0 stevel "FIRST", /* 4 */ 96 0 stevel "NEXT", /* 5 */ 97 0 stevel "XFR", /* 6 */ 98 0 stevel "CLEAR", /* 7 */ 99 0 stevel "ALL", /* 8 */ 100 0 stevel "MASTER", /* 9 */ 101 0 stevel "ORDER", /* 10 */ 102 0 stevel "MAPLIST", /* 11 */ 103 0 stevel "NEWXFR", /* 12 */ 104 0 stevel }; 105 0 stevel 106 0 stevel #define MAXPROC_BIND 2 107 0 stevel #define MAXPROC 12 108 0 stevel 109 0 stevel static char *procnames_long[] = { 110 0 stevel "Null procedure", /* 0 */ 111 0 stevel "Verify domain support", /* 1 */ 112 0 stevel "Verify domain support (broadcast)", /* 2 */ 113 0 stevel "Return value of a key", /* 3 */ 114 0 stevel "Return first key-value pair in map", /* 4 */ 115 0 stevel "Return next key-value pair in map", /* 5 */ 116 0 stevel "Request map update (old)", /* 6 */ 117 0 stevel "Close current map on server", /* 7 */ 118 0 stevel "Get all key-value pairs in map", /* 8 */ 119 0 stevel "Get master server", /* 9 */ 120 0 stevel "Get order", /* 10 */ 121 0 stevel "Return list of supported maps", /* 11 */ 122 0 stevel "Request map update", /* 12 */ 123 0 stevel }; 124 0 stevel 125 0 stevel void 126 0 stevel interpret_nisbind(flags, type, xid, vers, proc, data, len) 127 0 stevel int flags, type, xid, vers, proc; 128 0 stevel char *data; 129 0 stevel int len; 130 0 stevel { 131 0 stevel char *line; 132 0 stevel char buff[YPMAXDOMAIN + 1]; 133 0 stevel unsigned int status; 134 0 stevel 135 0 stevel if (proc < 0 || proc > MAXPROC_BIND) 136 0 stevel return; 137 0 stevel 138 0 stevel if (flags & F_SUM) { 139 0 stevel if (setjmp(xdr_err)) { 140 0 stevel return; 141 0 stevel } 142 0 stevel 143 0 stevel line = get_sum_line(); 144 0 stevel 145 0 stevel if (type == CALL) { 146 0 stevel (void) sprintf(line, 147 0 stevel "NISBIND C %s", 148 0 stevel procnames_bind_short[proc]); 149 0 stevel line += strlen(line); 150 0 stevel switch (proc) { 151 0 stevel case YPBINDPROC_NULL: 152 0 stevel break; 153 0 stevel case YPBINDPROC_DOMAIN: 154 0 stevel (void) sprintf(line, " %s", 155 0 stevel getxdr_string(buff, YPMAXDOMAIN)); 156 0 stevel break; 157 0 stevel case YPBINDPROC_SETDOM: 158 0 stevel (void) sprintf(line, " %s", 159 0 stevel getxdr_string(buff, YPMAXDOMAIN)); 160 0 stevel break; 161 0 stevel default: 162 0 stevel break; 163 0 stevel } 164 0 stevel check_retransmit(line, xid); 165 0 stevel } else { 166 0 stevel (void) sprintf(line, "NISBIND R %s ", 167 0 stevel procnames_bind_short[proc]); 168 0 stevel line += strlen(line); 169 0 stevel switch (proc) { 170 0 stevel case YPBINDPROC_NULL: 171 0 stevel break; 172 0 stevel case YPBINDPROC_DOMAIN: 173 0 stevel status = getxdr_long(); 174 0 stevel if (status == 1) { /* success */ 175 0 stevel (void) strcat(line, "OK"); 176 0 stevel } else { /* failure */ 177 0 stevel status = getxdr_long(); 178 0 stevel (void) sprintf(line, "ERROR=%s", 179 0 stevel ypbind_error(status)); 180 0 stevel } 181 0 stevel break; 182 0 stevel case YPBINDPROC_SETDOM: 183 0 stevel break; 184 0 stevel default: 185 0 stevel break; 186 0 stevel } 187 0 stevel } 188 0 stevel } 189 0 stevel 190 0 stevel if (flags & F_DTAIL) { 191 0 stevel show_header("NISBIND:", 192 0 stevel "Network Information Service Bind", len); 193 0 stevel show_space(); 194 0 stevel if (setjmp(xdr_err)) { 195 0 stevel return; 196 0 stevel } 197 0 stevel (void) sprintf(get_line(0, 0), 198 0 stevel "Proc = %d (%s)", 199 0 stevel proc, procnames_bind_long[proc]); 200 0 stevel if (type == CALL) { 201 0 stevel switch (proc) { 202 0 stevel case YPBINDPROC_NULL: 203 0 stevel break; 204 0 stevel case YPBINDPROC_DOMAIN: 205 0 stevel (void) showxdr_string(YPMAXDOMAIN, 206 0 stevel "Domain = %s"); 207 0 stevel break; 208 0 stevel case YPBINDPROC_SETDOM: 209 0 stevel (void) showxdr_string(YPMAXDOMAIN, 210 0 stevel "Domain = %s"); 211 0 stevel (void) showxdr_hex(4, "Address=%s"); 212 0 stevel (void) showxdr_hex(2, "Port=%s"); 213 0 stevel (void) showxdr_u_long("Version=%lu"); 214 0 stevel break; 215 0 stevel default: 216 0 stevel break; 217 0 stevel } 218 0 stevel } else { 219 0 stevel switch (proc) { 220 0 stevel case YPBINDPROC_NULL: 221 0 stevel break; 222 0 stevel case YPBINDPROC_DOMAIN: 223 0 stevel status = getxdr_u_long(); 224 0 stevel (void) sprintf(get_line(0, 0), 225 0 stevel "Status = %lu (%s)", 226 0 stevel status, 227 0 stevel status == 1 ? "OK":"Fail"); 228 0 stevel if (status == 1) { 229 0 stevel (void) showxdr_hex(4, 230 0 stevel "Address=%s"); 231 0 stevel (void) showxdr_hex(2, 232 0 stevel "Port=%s"); 233 0 stevel } else { 234 0 stevel status = getxdr_u_long(); 235 0 stevel (void) sprintf(get_line(0, 0), 236 0 stevel "Error = %lu (%s)", 237 0 stevel status, 238 0 stevel ypbind_error(status)); 239 0 stevel } 240 0 stevel break; 241 0 stevel case YPBINDPROC_SETDOM: 242 0 stevel break; 243 0 stevel default: 244 0 stevel break; 245 0 stevel } 246 0 stevel } 247 0 stevel show_trailer(); 248 0 stevel } 249 0 stevel } 250 0 stevel 251 0 stevel void 252 0 stevel interpret_nis(flags, type, xid, vers, proc, data, len) 253 0 stevel int flags, type, xid, vers, proc; 254 0 stevel char *data; 255 0 stevel int len; 256 0 stevel { 257 0 stevel char *line; 258 0 stevel char *dom, *map, *key; 259 0 stevel int transid, status; 260 0 stevel /* buffers are all the same size so we don't have to keep track */ 261 0 stevel char buff1[YPMAXRECORD + 1], buff2[YPMAXRECORD + 1]; 262 0 stevel char buff3[YPMAXRECORD + 1]; 263 0 stevel 264 0 stevel if (flags & F_SUM) { 265 0 stevel if (setjmp(xdr_err)) { 266 0 stevel return; 267 0 stevel } 268 0 stevel 269 0 stevel line = get_sum_line(); 270 0 stevel 271 0 stevel if (type == CALL) { 272 0 stevel if (proc > MAXPROC) 273 0 stevel (void) sprintf(line, "NIS C %d", proc); 274 0 stevel else 275 0 stevel (void) sprintf(line, 276 0 stevel "NIS C %s", 277 0 stevel procnames_short[proc]); 278 0 stevel line += strlen(line); 279 0 stevel switch (proc) { 280 0 stevel case YPPROC_NULL: 281 0 stevel break; 282 0 stevel case YPPROC_DOMAIN: 283 0 stevel case YPPROC_DOMAIN_NONACK: 284 0 stevel case YPPROC_MAPLIST: 285 0 stevel /* YPMAXDOMAIN > YPMAXMAP */ 286 0 stevel (void) sprintf(line, " %s", 287 0 stevel getxdr_string(buff1, YPMAXDOMAIN)); 288 0 stevel break; 289 0 stevel case YPPROC_FIRST: 290 0 stevel dom = getxdr_string(buff1, YPMAXDOMAIN); 291 0 stevel map = getxdr_string(buff2, YPMAXMAP); 292 0 stevel (void) sprintf(line, " %s", map); 293 0 stevel break; 294 0 stevel case YPPROC_MATCH: 295 0 stevel case YPPROC_NEXT: 296 0 stevel dom = getxdr_string(buff1, YPMAXDOMAIN); 297 0 stevel map = getxdr_string(buff2, YPMAXMAP); 298 0 stevel key = getxdr_string(buff3, YPMAXRECORD); 299 0 stevel (void) sprintf(line, 300 0 stevel " %s in %s", 301 0 stevel key, map); 302 0 stevel break; 303 0 stevel case YPPROC_NEWXFR: 304 0 stevel case YPPROC_XFR: 305 0 stevel dom = getxdr_string(buff1, YPMAXDOMAIN); 306 0 stevel map = getxdr_string(buff2, YPMAXMAP); 307 0 stevel (void) sprintf(line, 308 0 stevel " map %s in %s", 309 0 stevel map, dom); 310 0 stevel break; 311 0 stevel case YPPROC_CLEAR: 312 0 stevel break; 313 0 stevel case YPPROC_ALL: 314 0 stevel case YPPROC_MASTER: 315 0 stevel case YPPROC_ORDER: 316 0 stevel dom = getxdr_string(buff1, YPMAXDOMAIN); 317 0 stevel map = getxdr_string(buff2, YPMAXMAP); 318 0 stevel (void) sprintf(line, 319 0 stevel " map %s in %s", 320 0 stevel map, dom); 321 0 stevel break; 322 0 stevel default: 323 0 stevel break; 324 0 stevel } 325 0 stevel check_retransmit(line, xid); 326 0 stevel } else { 327 0 stevel if (proc > MAXPROC) 328 0 stevel (void) sprintf(line, "NIS R %d ", proc); 329 0 stevel else 330 0 stevel (void) sprintf(line, "NIS R %s ", 331 0 stevel procnames_short[proc]); 332 0 stevel line += strlen(line); 333 0 stevel switch (proc) { 334 0 stevel case YPPROC_NULL: 335 0 stevel break; 336 0 stevel case YPPROC_DOMAIN: 337 0 stevel case YPPROC_DOMAIN_NONACK: 338 0 stevel (void) sprintf(line, "%s", 339 0 stevel getxdr_long() ? "OK":"Fail"); 340 0 stevel break; 341 0 stevel case YPPROC_MATCH: 342 0 stevel (void) sum_ypstat(line); 343 0 stevel break; 344 0 stevel case YPPROC_FIRST: 345 0 stevel case YPPROC_NEXT: 346 0 stevel if (sum_ypstat(line) == YP_TRUE) { 347 0 stevel line += strlen(line); 348 0 stevel (void) getxdr_string(buff1, 349 0 stevel YPMAXRECORD); 350 0 stevel (void) sprintf(line, " key=%s", 351 0 stevel getxdr_string(buff1, 352 0 stevel YPMAXRECORD)); 353 0 stevel } 354 0 stevel break; 355 0 stevel case YPPROC_NEWXFR: 356 0 stevel case YPPROC_XFR: 357 0 stevel transid = getxdr_u_long(); 358 0 stevel status = getxdr_long(); 359 0 stevel (void) sprintf(line, "transid=%lu %s", 360 0 stevel transid, 361 0 stevel sum_ypxfrstat(status)); 362 0 stevel break; 363 0 stevel case YPPROC_CLEAR: 364 0 stevel break; 365 0 stevel case YPPROC_ALL: 366 0 stevel if (getxdr_u_long()) { 367 0 stevel (void) sum_ypstat(line); 368 0 stevel line += strlen(line); 369 0 stevel (void) sprintf(line, " key=%s", 370 0 stevel getxdr_string(buff1, YPMAXRECORD)); 371 0 stevel } else { 372 0 stevel (void) sprintf(line, 373 0 stevel "No more"); 374 0 stevel } 375 0 stevel break; 376 0 stevel case YPPROC_MASTER: 377 0 stevel if (sum_ypstat(line) == YP_TRUE) { 378 0 stevel line += strlen(line); 379 0 stevel (void) sprintf(line, " peer=%s", 380 0 stevel getxdr_string(buff1, 381 0 stevel YPMAXPEER)); 382 0 stevel } 383 0 stevel break; 384 0 stevel case YPPROC_ORDER: 385 0 stevel if (sum_ypstat(line) == YP_TRUE) { 386 0 stevel line += strlen(line); 387 0 stevel (void) sprintf(line, " order=%lu", 388 0 stevel getxdr_u_long()); 389 0 stevel } 390 0 stevel break; 391 0 stevel case YPPROC_MAPLIST: 392 0 stevel if (sum_ypstat(line) == YP_TRUE) { 393 0 stevel line += strlen(line); 394 0 stevel (void) sprintf(line, " %s", 395 0 stevel sum_ypmaplist()); 396 0 stevel } 397 0 stevel break; 398 0 stevel default: 399 0 stevel break; 400 0 stevel } 401 0 stevel } 402 0 stevel } 403 0 stevel 404 0 stevel if (flags & F_DTAIL) { 405 0 stevel show_header("NIS: ", "Network Information Service", len); 406 0 stevel show_space(); 407 0 stevel if (setjmp(xdr_err)) { 408 0 stevel return; 409 0 stevel } 410 0 stevel (void) sprintf(get_line(0, 0), 411 0 stevel "Proc = %d (%s)", 412 0 stevel proc, 413 0 stevel proc > MAXPROC ? "unknown" : procnames_long[proc]); 414 0 stevel if (type == CALL) 415 0 stevel niscall(proc); 416 0 stevel else 417 0 stevel nisreply(proc); 418 0 stevel show_trailer(); 419 0 stevel } 420 0 stevel } 421 0 stevel 422 0 stevel /* 423 0 stevel * Print out version 2 NIS call packets 424 0 stevel */ 425 0 stevel 426 0 stevel static void 427 0 stevel niscall(proc) 428 0 stevel int proc; 429 0 stevel { 430 0 stevel switch (proc) { 431 0 stevel case YPPROC_NULL: 432 0 stevel break; 433 0 stevel case YPPROC_DOMAIN: 434 0 stevel case YPPROC_DOMAIN_NONACK: 435 0 stevel case YPPROC_MAPLIST: 436 0 stevel (void) showxdr_string(YPMAXDOMAIN, "Domain = %s"); 437 0 stevel break; 438 0 stevel case YPPROC_FIRST: 439 0 stevel (void) showxdr_string(YPMAXDOMAIN, "Domain = %s"); 440 0 stevel (void) showxdr_string(YPMAXMAP, "Map = %s"); 441 0 stevel break; 442 0 stevel case YPPROC_MATCH: 443 0 stevel case YPPROC_NEXT: 444 0 stevel (void) showxdr_string(YPMAXDOMAIN, "Domain = %s"); 445 0 stevel (void) showxdr_string(YPMAXMAP, "Map = %s"); 446 0 stevel (void) showxdr_string(YPMAXRECORD, "Key = %s"); 447 0 stevel break; 448 0 stevel case YPPROC_NEWXFR: 449 0 stevel (void) showxdr_string(YPMAXDOMAIN, "Domain = %s"); 450 0 stevel (void) showxdr_string(YPMAXMAP, "Map = %s"); 451 0 stevel (void) showxdr_u_long("Order = %lu"); 452 0 stevel (void) showxdr_string(YPMAXPEER, "Peer = %s"); 453 0 stevel (void) showxdr_u_long("Transid = %lu"); 454 0 stevel (void) showxdr_u_long("Prog = %lu"); 455 0 stevel (void) showxdr_string(YPMAXPEER, "Name = %s"); 456 0 stevel break; 457 0 stevel case YPPROC_XFR: 458 0 stevel (void) showxdr_string(YPMAXDOMAIN, "Domain = %s"); 459 0 stevel (void) showxdr_string(YPMAXMAP, "Map = %s"); 460 0 stevel (void) showxdr_u_long("Order = %lu"); 461 0 stevel (void) showxdr_string(YPMAXPEER, "Peer = %s"); 462 0 stevel (void) showxdr_u_long("Transid = %lu"); 463 0 stevel (void) showxdr_u_long("Prog = %lu"); 464 0 stevel (void) showxdr_u_long("Port = %lu"); 465 0 stevel break; 466 0 stevel case YPPROC_CLEAR: 467 0 stevel break; 468 0 stevel case YPPROC_ALL: 469 0 stevel case YPPROC_MASTER: 470 0 stevel case YPPROC_ORDER: 471 0 stevel (void) showxdr_string(YPMAXDOMAIN, "Domain = %s"); 472 0 stevel (void) showxdr_string(YPMAXMAP, "Map = %s"); 473 0 stevel break; 474 0 stevel default: 475 0 stevel break; 476 0 stevel } 477 0 stevel } 478 0 stevel 479 0 stevel /* 480 0 stevel * Print out version 2 NIS reply packets 481 0 stevel */ 482 0 stevel 483 0 stevel void 484 0 stevel nisreply(proc) 485 0 stevel int proc; 486 0 stevel { 487 0 stevel unsigned int xfrstat, more; 488 0 stevel 489 0 stevel switch (proc) { 490 0 stevel case YPPROC_NULL: 491 0 stevel break; 492 0 stevel case YPPROC_DOMAIN: 493 0 stevel case YPPROC_DOMAIN_NONACK: 494 0 stevel (void) sprintf(get_line(0, 0), 495 0 stevel "Result=%s", 496 0 stevel getxdr_u_long() ? "OK":"Fail"); 497 0 stevel break; 498 0 stevel case YPPROC_MATCH: 499 0 stevel (void) detail_ypstat(); 500 0 stevel (void) showxdr_string(YPMAXRECORD, "Value = %s"); 501 0 stevel break; 502 0 stevel case YPPROC_FIRST: 503 0 stevel case YPPROC_NEXT: 504 0 stevel (void) detail_ypstat(); 505 0 stevel (void) showxdr_string(YPMAXRECORD, "Value = %s"); 506 0 stevel (void) showxdr_string(YPMAXRECORD, "Key = %s"); 507 0 stevel break; 508 0 stevel case YPPROC_NEWXFR: 509 0 stevel case YPPROC_XFR: 510 0 stevel (void) showxdr_u_long("Transid = %lu"); 511 0 stevel xfrstat = getxdr_u_long(); 512 0 stevel (void) sprintf(get_line(0, 0), 513 0 stevel "Transfer status = %lu (%s)", 514 0 stevel xfrstat, sum_ypxfrstat(xfrstat)); 515 0 stevel break; 516 0 stevel case YPPROC_CLEAR: 517 0 stevel break; 518 0 stevel case YPPROC_ALL: 519 0 stevel more = getxdr_u_long(); 520 0 stevel (void) sprintf(get_line(0, 0), 521 0 stevel "More = %s", 522 0 stevel more ? "true" : "false"); 523 0 stevel if (more) { 524 0 stevel (void) detail_ypstat(); 525 0 stevel (void) showxdr_string(YPMAXRECORD, "Value = %s"); 526 0 stevel (void) showxdr_string(YPMAXRECORD, "Key = %s"); 527 0 stevel } 528 0 stevel break; 529 0 stevel case YPPROC_MASTER: 530 0 stevel (void) detail_ypstat(); 531 0 stevel (void) showxdr_string(YPMAXPEER, "Peer = %s"); 532 0 stevel case YPPROC_ORDER: 533 0 stevel (void) detail_ypstat(); 534 0 stevel (void) showxdr_u_long("Order=%lu"); 535 0 stevel break; 536 0 stevel case YPPROC_MAPLIST: 537 0 stevel (void) detail_ypstat(); 538 0 stevel detail_ypmaplist(); 539 0 stevel break; 540 0 stevel default: 541 0 stevel break; 542 0 stevel } 543 0 stevel } 544 0 stevel 545 0 stevel char * 546 0 stevel sum_ypxfrstat(status) 547 0 stevel int status; 548 0 stevel { 549 0 stevel static char buff [16]; 550 0 stevel 551 0 stevel switch (status) { 552 0 stevel case 1: return ("Success"); 553 0 stevel case 2: return ("Master's version not newer"); 554 0 stevel case -1: return ("Can't find server for map"); 555 0 stevel case -2: return ("No such domain"); 556 0 stevel case -3: return ("Resource allocation failure"); 557 0 stevel case -4: return ("RPC failure talking to server"); 558 0 stevel case -5: return ("Can't get master address"); 559 0 stevel case -6: return ("NIS server/map db error"); 560 0 stevel case -7: return ("Bad arguments"); 561 0 stevel case -8: return ("Local dbm operation failed"); 562 0 stevel case -9: return ("Local file I/O operation failed"); 563 0 stevel case -10: return ("Map version skew during transfer"); 564 0 stevel case -11: return ("Can't send clear req to local ypserv"); 565 0 stevel case -12: return ("No local order number in map"); 566 0 stevel case -13: return ("Transfer error"); 567 0 stevel case -14: return ("Transfer request refused"); 568 0 stevel default: 569 0 stevel (void) sprintf(buff, "(%d)", status); 570 0 stevel return (buff); 571 0 stevel } 572 0 stevel /* NOTREACHED */ 573 0 stevel } 574 0 stevel 575 0 stevel static int 576 0 stevel sum_ypstat(line) 577 0 stevel char *line; 578 0 stevel { 579 0 stevel ulong_t status; 580 0 stevel char *str; 581 0 stevel char buff[16]; 582 0 stevel 583 0 stevel status = getxdr_u_long(); 584 0 stevel switch (status) { 585 0 stevel case YP_TRUE: str = "OK"; break; 586 0 stevel case YP_NOMORE: str = "No more entries"; break; 587 0 stevel case YP_FALSE: str = "Fail"; break; 588 0 stevel case YP_NOMAP: str = "No such map"; break; 589 0 stevel case YP_NODOM: str = "No such domain"; break; 590 0 stevel case YP_NOKEY: str = "No such key"; break; 591 0 stevel case YP_BADOP: str = "Invalid operation"; break; 592 0 stevel case YP_BADDB: str = "Bad database"; break; 593 0 stevel case YP_YPERR: str = "Server error"; break; 594 0 stevel case YP_BADARGS:str = "Bad args"; break; 595 0 stevel case YP_VERS: str = "Version mismatch"; break; 596 0 stevel default: (void) sprintf(buff, "(%lu)", status); 597 0 stevel str = buff; 598 0 stevel break; 599 0 stevel } 600 0 stevel (void) strcpy(line, str); 601 0 stevel return ((int)status); 602 0 stevel } 603 0 stevel 604 0 stevel static int 605 0 stevel detail_ypstat() 606 0 stevel { 607 0 stevel ulong_t status; 608 0 stevel char buff[32]; 609 0 stevel 610 0 stevel 611 0 stevel status = sum_ypstat(buff); 612 0 stevel (void) sprintf(get_line(0, 0), 613 0 stevel "Status = %d (%s)", 614 0 stevel status, buff); 615 0 stevel 616 0 stevel return ((int)status); 617 0 stevel } 618 0 stevel 619 0 stevel char * 620 0 stevel sum_ypmaplist() 621 0 stevel { 622 0 stevel static char buff[YPMAXMAP + 1]; 623 0 stevel int maps = 0; 624 0 stevel 625 0 stevel if (setjmp(xdr_err)) { 626 0 stevel (void) sprintf(buff, "%d+ maps", maps); 627 0 stevel return (buff); 628 0 stevel } 629 0 stevel 630 0 stevel while (getxdr_long()) { 631 0 stevel (void) getxdr_string(buff, YPMAXMAP); 632 0 stevel maps++; 633 0 stevel } 634 0 stevel 635 0 stevel (void) sprintf(buff, "%d maps", maps); 636 0 stevel return (buff); 637 0 stevel } 638 0 stevel 639 0 stevel void 640 0 stevel detail_ypmaplist() 641 0 stevel { 642 0 stevel int maps = 0; 643 0 stevel 644 0 stevel if (setjmp(xdr_err)) { 645 0 stevel (void) sprintf(get_line(0, 0), 646 0 stevel " %d+ maps. (Frame is incomplete)", 647 0 stevel maps); 648 0 stevel return; 649 0 stevel } 650 0 stevel 651 0 stevel (void) sprintf(get_line(0, 0), "Map list"); 652 0 stevel 653 0 stevel while (getxdr_long()) { 654 0 stevel (void) showxdr_string(YPMAXMAP, " %s"); 655 0 stevel maps++; 656 0 stevel } 657 0 stevel 658 0 stevel (void) sprintf(get_line(0, 0), "%d maps", maps); 659 0 stevel } 660 0 stevel 661 0 stevel char * 662 0 stevel ypbind_error(err) 663 0 stevel int err; 664 0 stevel { 665 0 stevel static char buff[16]; 666 0 stevel 667 0 stevel switch (err) { 668 0 stevel case YPBIND_ERR_ERR: return ("Internal error"); 669 0 stevel case YPBIND_ERR_NOSERV: return ("Internal error"); 670 0 stevel case YPBIND_ERR_RESC: return ("Resource allocation fail"); 671 0 stevel default: 672 0 stevel (void) sprintf(buff, "(%d)", err); 673 0 stevel return (buff); 674 0 stevel } 675 0 stevel /* NOTREACHED */ 676 0 stevel } 677