mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-27 05:00:15 +00:00
9d46370ca3
This automatically-generated patch converts 703 function definitions in glibc from old-style K&R to prototype-style. This conversion is deliberately simplistic, excluding any tricky cases as even a patch covering only simple cases is still very large. Currently excluded are: sysdeps files (to improve test coverage for the initial patch); files containing assertions (to avoid line number changes so that generated libraries can be compared); any cases where the generated function declaration would involve lines over 79 characters and so need to be wrapped; any cases with array parameters or other cases where parameter declarators don't end with the parameter name; any other cases that my script didn't parse. I didn't try to make the ChangeLog generation indicate when function definitions are conditional; it just lists the functions changed without regard to that. Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by the patch). * crypt/cert.c (good_bye): Convert to prototype-style function definition. (get8): Likewise. (put8): Likewise. * crypt/crypt-entry.c (crypt): Likewise. (__fcrypt): Likewise. * crypt/crypt_util.c (_ufc_prbits): Likewise. (_ufc_set_bits): Likewise. (_ufc_clearmem): Likewise. (__init_des_r): Likewise. (shuffle_sb): Likewise. (shuffle_sb): Likewise. (_ufc_setup_salt_r): Likewise. (_ufc_mk_keytab_r): Likewise. (_ufc_dofinalperm_r): Likewise. (encrypt): Likewise. (__setkey_r): Likewise. (setkey): Likewise. * crypt/md5.c (md5_init_ctx): Likewise. (md5_read_ctx): Likewise. (md5_finish_ctx): Likewise. (md5_stream): Likewise. (md5_buffer): Likewise. (md5_process_bytes): Likewise. * crypt/sha256.c (__sha256_init_ctx): Likewise. (__sha256_finish_ctx): Likewise. (__sha256_process_bytes): Likewise. * crypt/sha512.c (__sha512_init_ctx): Likewise. (__sha512_finish_ctx): Likewise. (__sha512_process_bytes): Likewise. * ctype/isctype.c (__isctype): Likewise. * debug/backtrace.c (__backtrace): Likewise. * debug/backtracesymsfd.c (__backtrace_symbols_fd): Likewise. * debug/fgets_chk.c (__fgets_chk): Likewise. * debug/fgets_u_chk.c (__fgets_unlocked_chk): Likewise. * debug/memcpy_chk.c (__memcpy_chk): Likewise. * debug/memmove_chk.c (MEMMOVE_CHK): Likewise. * debug/mempcpy_chk.c (__mempcpy_chk): Likewise. * debug/memset_chk.c (__memset_chk): Likewise. * debug/strcat_chk.c (__strcat_chk): Likewise. * debug/strncat_chk.c (__strncat_chk): Likewise. * debug/strncpy_chk.c (__strncpy_chk): Likewise. * debug/vsprintf_chk.c (_IO_str_chk_overflow): Likewise. * dirent/dirfd.c (dirfd): Likewise. * dirent/getdents.c (__getdirentries): Likewise. * dirent/getdents64.c (getdirentries64): Likewise. * dirent/rewinddir.c (__rewinddir): Likewise. * dirent/seekdir.c (seekdir): Likewise. * dirent/telldir.c (telldir): Likewise. * elf/sln.c (makesymlinks): Likewise. (makesymlink): Likewise. * gmon/gmon.c (__moncontrol): Likewise. (__monstartup): Likewise. (write_hist): Likewise. (write_call_graph): Likewise. (write_bb_counts): Likewise. * grp/setgroups.c (setgroups): Likewise. * inet/inet_lnaof.c (inet_lnaof): Likewise. * inet/inet_net.c (inet_network): Likewise. * inet/inet_netof.c (inet_netof): Likewise. * inet/rcmd.c (rresvport_af): Likewise. (rresvport): Likewise. * io/access.c (__access): Likewise. * io/chdir.c (__chdir): Likewise. * io/chmod.c (__chmod): Likewise. * io/chown.c (__chown): Likewise. * io/close.c (__close): Likewise. * io/creat.c (creat): Likewise. * io/creat64.c (creat64): Likewise. * io/dup.c (__dup): Likewise. * io/dup2.c (__dup2): Likewise. * io/dup3.c (__dup3): Likewise. * io/euidaccess.c (__euidaccess): Likewise. * io/faccessat.c (faccessat): Likewise. * io/fchmod.c (__fchmod): Likewise. * io/fchmodat.c (fchmodat): Likewise. * io/fchown.c (__fchown): Likewise. * io/fchownat.c (fchownat): Likewise. * io/fcntl.c (__fcntl): Likewise. * io/flock.c (__flock): Likewise. * io/fts.c (fts_load): Likewise. (fts_close): Likewise. (fts_read): Likewise. (fts_set): Likewise. (fts_children): Likewise. (fts_build): Likewise. (fts_stat): Likewise. (fts_sort): Likewise. (fts_alloc): Likewise. (fts_lfree): Likewise. (fts_palloc): Likewise. (fts_padjust): Likewise. (fts_maxarglen): Likewise. (fts_safe_changedir): Likewise. * io/getwd.c (getwd): Likewise. * io/isatty.c (__isatty): Likewise. * io/lchown.c (__lchown): Likewise. * io/link.c (__link): Likewise. * io/linkat.c (linkat): Likewise. * io/lseek.c (__libc_lseek): Likewise. * io/mkdir.c (__mkdir): Likewise. * io/mkdirat.c (mkdirat): Likewise. * io/mkfifo.c (mkfifo): Likewise. * io/mkfifoat.c (mkfifoat): Likewise. * io/open.c (__libc_open): Likewise. * io/open64.c (__libc_open64): Likewise. * io/readlink.c (__readlink): Likewise. * io/readlinkat.c (readlinkat): Likewise. * io/rmdir.c (__rmdir): Likewise. * io/symlink.c (__symlink): Likewise. * io/symlinkat.c (symlinkat): Likewise. * io/ttyname.c (ttyname): Likewise. * io/ttyname_r.c (__ttyname_r): Likewise. * io/umask.c (__umask): Likewise. * io/unlink.c (__unlink): Likewise. * io/unlinkat.c (unlinkat): Likewise. * io/utime.c (utime): Likewise. * libio/clearerr.c (clearerr): Likewise. * libio/clearerr_u.c (clearerr_unlocked): Likewise. * libio/feof.c (_IO_feof): Likewise. * libio/feof_u.c (feof_unlocked): Likewise. * libio/ferror.c (_IO_ferror): Likewise. * libio/ferror_u.c (ferror_unlocked): Likewise. * libio/filedoalloc.c (_IO_file_doallocate): Likewise. * libio/fileno.c (__fileno): Likewise. * libio/fputc.c (fputc): Likewise. * libio/fputc_u.c (fputc_unlocked): Likewise. * libio/fputwc.c (fputwc): Likewise. * libio/fputwc_u.c (fputwc_unlocked): Likewise. * libio/freopen.c (freopen): Likewise. * libio/freopen64.c (freopen64): Likewise. * libio/fseek.c (fseek): Likewise. * libio/fseeko.c (fseeko): Likewise. * libio/fseeko64.c (fseeko64): Likewise. * libio/ftello.c (__ftello): Likewise. * libio/ftello64.c (ftello64): Likewise. * libio/fwide.c (fwide): Likewise. * libio/genops.c (_IO_un_link): Likewise. (_IO_link_in): Likewise. (_IO_least_marker): Likewise. (_IO_switch_to_main_get_area): Likewise. (_IO_switch_to_backup_area): Likewise. (_IO_switch_to_get_mode): Likewise. (_IO_free_backup_area): Likewise. (_IO_switch_to_put_mode): Likewise. (__overflow): Likewise. (__underflow): Likewise. (__uflow): Likewise. (_IO_setb): Likewise. (_IO_doallocbuf): Likewise. (_IO_default_underflow): Likewise. (_IO_default_uflow): Likewise. (_IO_default_xsputn): Likewise. (_IO_sgetn): Likewise. (_IO_default_xsgetn): Likewise. (_IO_sync): Likewise. (_IO_default_setbuf): Likewise. (_IO_default_seekpos): Likewise. (_IO_default_doallocate): Likewise. (_IO_init): Likewise. (_IO_old_init): Likewise. (_IO_default_sync): Likewise. (_IO_default_finish): Likewise. (_IO_default_seekoff): Likewise. (_IO_sputbackc): Likewise. (_IO_sungetc): Likewise. (_IO_set_column): Likewise. (_IO_set_column): Likewise. (_IO_adjust_column): Likewise. (_IO_get_column): Likewise. (_IO_init_marker): Likewise. (_IO_remove_marker): Likewise. (_IO_marker_difference): Likewise. (_IO_marker_delta): Likewise. (_IO_seekmark): Likewise. (_IO_unsave_markers): Likewise. (_IO_nobackup_pbackfail): Likewise. (_IO_default_pbackfail): Likewise. (_IO_default_seek): Likewise. (_IO_default_stat): Likewise. (_IO_default_read): Likewise. (_IO_default_write): Likewise. (_IO_default_showmanyc): Likewise. (_IO_default_imbue): Likewise. (_IO_iter_next): Likewise. (_IO_iter_file): Likewise. * libio/getc.c (_IO_getc): Likewise. * libio/getwc.c (_IO_getwc): Likewise. * libio/iofclose.c (_IO_new_fclose): Likewise. * libio/iofdopen.c (_IO_new_fdopen): Likewise. * libio/iofflush.c (_IO_fflush): Likewise. * libio/iofflush_u.c (__fflush_unlocked): Likewise. * libio/iofgetpos.c (_IO_new_fgetpos): Likewise. * libio/iofgetpos64.c (_IO_new_fgetpos64): Likewise. * libio/iofgets.c (_IO_fgets): Likewise. * libio/iofgets_u.c (__fgets_unlocked): Likewise. * libio/iofgetws.c (fgetws): Likewise. * libio/iofgetws_u.c (fgetws_unlocked): Likewise. * libio/iofopen64.c (_IO_fopen64): Likewise. * libio/iofopncook.c (_IO_cookie_read): Likewise. (_IO_cookie_write): Likewise. (_IO_cookie_seek): Likewise. (_IO_cookie_close): Likewise. (_IO_cookie_seekoff): Likewise. (_IO_old_cookie_seek): Likewise. * libio/iofputs.c (_IO_fputs): Likewise. * libio/iofputs_u.c (__fputs_unlocked): Likewise. * libio/iofputws.c (fputws): Likewise. * libio/iofputws_u.c (fputws_unlocked): Likewise. * libio/iofread.c (_IO_fread): Likewise. * libio/iofread_u.c (__fread_unlocked): Likewise. * libio/iofsetpos.c (_IO_new_fsetpos): Likewise. * libio/iofsetpos64.c (_IO_new_fsetpos64): Likewise. * libio/ioftell.c (_IO_ftell): Likewise. * libio/iofwrite.c (_IO_fwrite): Likewise. * libio/iogetdelim.c (_IO_getdelim): Likewise. * libio/iogets.c (_IO_gets): Likewise. * libio/iopadn.c (_IO_padn): Likewise. * libio/iopopen.c (_IO_new_proc_open): Likewise. (_IO_new_popen): Likewise. (_IO_new_proc_close): Likewise. * libio/ioputs.c (_IO_puts): Likewise. * libio/ioseekoff.c (_IO_seekoff_unlocked): Likewise. (_IO_seekoff): Likewise. * libio/ioseekpos.c (_IO_seekpos_unlocked): Likewise. (_IO_seekpos): Likewise. * libio/iosetbuffer.c (_IO_setbuffer): Likewise. * libio/iosetvbuf.c (_IO_setvbuf): Likewise. * libio/ioungetc.c (_IO_ungetc): Likewise. * libio/ioungetwc.c (ungetwc): Likewise. * libio/iovdprintf.c (_IO_vdprintf): Likewise. * libio/iovsscanf.c (_IO_vsscanf): Likewise. * libio/iowpadn.c (_IO_wpadn): Likewise. * libio/libc_fatal.c (__libc_fatal): Likewise. * libio/memstream.c (__open_memstream): Likewise. (_IO_mem_sync): Likewise. (_IO_mem_finish): Likewise. * libio/oldfileops.c (_IO_old_file_init): Likewise. (_IO_old_file_close_it): Likewise. (_IO_old_file_finish): Likewise. (_IO_old_file_fopen): Likewise. (_IO_old_file_attach): Likewise. (_IO_old_file_setbuf): Likewise. (_IO_old_do_write): Likewise. (old_do_write): Likewise. (_IO_old_file_underflow): Likewise. (_IO_old_file_overflow): Likewise. (_IO_old_file_sync): Likewise. (_IO_old_file_seekoff): Likewise. (_IO_old_file_write): Likewise. (_IO_old_file_xsputn): Likewise. * libio/oldiofclose.c (_IO_old_fclose): Likewise. * libio/oldiofdopen.c (_IO_old_fdopen): Likewise. * libio/oldiofgetpos.c (_IO_old_fgetpos): Likewise. * libio/oldiofgetpos64.c (_IO_old_fgetpos64): Likewise. * libio/oldiofopen.c (_IO_old_fopen): Likewise. * libio/oldiofsetpos.c (_IO_old_fsetpos): Likewise. * libio/oldiofsetpos64.c (_IO_old_fsetpos64): Likewise. * libio/oldiopopen.c (_IO_old_proc_open): Likewise. (_IO_old_popen): Likewise. (_IO_old_proc_close): Likewise. * libio/oldpclose.c (__old_pclose): Likewise. * libio/pclose.c (__new_pclose): Likewise. * libio/peekc.c (_IO_peekc_locked): Likewise. * libio/putc.c (_IO_putc): Likewise. * libio/putc_u.c (putc_unlocked): Likewise. * libio/putchar.c (putchar): Likewise. * libio/putchar_u.c (putchar_unlocked): Likewise. * libio/putwc.c (putwc): Likewise. * libio/putwc_u.c (putwc_unlocked): Likewise. * libio/putwchar.c (putwchar): Likewise. * libio/putwchar_u.c (putwchar_unlocked): Likewise. * libio/rewind.c (rewind): Likewise. * libio/setbuf.c (setbuf): Likewise. * libio/setlinebuf.c (setlinebuf): Likewise. * libio/vasprintf.c (_IO_vasprintf): Likewise. * libio/vscanf.c (_IO_vscanf): Likewise. * libio/vsnprintf.c (_IO_strn_overflow): Likewise. * libio/vswprintf.c (_IO_wstrn_overflow): Likewise. * libio/wfiledoalloc.c (_IO_wfile_doallocate): Likewise. * libio/wgenops.c (_IO_least_wmarker): Likewise. (_IO_switch_to_main_wget_area): Likewise. (_IO_switch_to_wbackup_area): Likewise. (_IO_wsetb): Likewise. (_IO_wdefault_pbackfail): Likewise. (_IO_wdefault_finish): Likewise. (_IO_wdefault_uflow): Likewise. (__woverflow): Likewise. (__wuflow): Likewise. (__wunderflow): Likewise. (_IO_wdefault_xsputn): Likewise. (_IO_wdefault_xsgetn): Likewise. (_IO_wdoallocbuf): Likewise. (_IO_wdefault_doallocate): Likewise. (_IO_switch_to_wget_mode): Likewise. (_IO_free_wbackup_area): Likewise. (_IO_switch_to_wput_mode): Likewise. (_IO_sputbackwc): Likewise. (_IO_sungetwc): Likewise. (_IO_adjust_wcolumn): Likewise. (_IO_init_wmarker): Likewise. (_IO_wmarker_delta): Likewise. (_IO_seekwmark): Likewise. (_IO_unsave_wmarkers): Likewise. * libio/wmemstream.c (open_wmemstream): Likewise. (_IO_wmem_sync): Likewise. (_IO_wmem_finish): Likewise. * locale/nl_langinfo.c (nl_langinfo): Likewise. * locale/nl_langinfo_l.c (__nl_langinfo_l): Likewise. * locale/programs/simple-hash.c (init_hash): Likewise. (delete_hash): Likewise. (insert_entry): Likewise. (set_entry): Likewise. (next_prime): Likewise. (is_prime): Likewise. * locale/programs/xmalloc.c (fixup_null_alloc): Likewise. (xmalloc): Likewise. (xrealloc): Likewise. * locale/programs/xstrdup.c (xstrdup): Likewise. * localedata/collate-test.c (xstrcoll): Likewise. * localedata/xfrm-test.c (xstrcmp): Likewise. * login/getlogin_r.c (__getlogin_r): Likewise. * login/getpt.c (__posix_openpt): Likewise. * login/login_tty.c (login_tty): Likewise. * login/setlogin.c (setlogin): Likewise. * mach/msg-destroy.c (__mach_msg_destroy): Likewise. (mach_msg_destroy_port): Likewise. (mach_msg_destroy_memory): Likewise. * malloc/mcheck.c (flood): Likewise. * misc/acct.c (acct): Likewise. * misc/brk.c (__brk): Likewise. * misc/chflags.c (chflags): Likewise. * misc/chroot.c (chroot): Likewise. * misc/fchflags.c (fchflags): Likewise. * misc/fstab.c (getfsspec): Likewise. (getfsfile): Likewise. * misc/fsync.c (fsync): Likewise. * misc/ftruncate.c (__ftruncate): Likewise. * misc/ftruncate64.c (__ftruncate64): Likewise. * misc/getdomain.c (getdomainname): Likewise. (getdomainname): Likewise. * misc/gethostname.c (__gethostname): Likewise. * misc/getpass.c (getpass): Likewise. * misc/getttyent.c (skip): Likewise. (value): Likewise. * misc/gtty.c (gtty): Likewise. * misc/hsearch.c (hsearch): Likewise. (hcreate): Likewise. * misc/hsearch_r.c (__hcreate_r): Likewise. (__hdestroy_r): Likewise. * misc/ioctl.c (__ioctl): Likewise. * misc/mkdtemp.c (mkdtemp): Likewise. * misc/mkostemp.c (mkostemp): Likewise. * misc/mkostemp64.c (mkostemp64): Likewise. * misc/mkostemps.c (mkostemps): Likewise. * misc/mkostemps64.c (mkostemps64): Likewise. * misc/mkstemp.c (mkstemp): Likewise. * misc/mkstemp64.c (mkstemp64): Likewise. * misc/mkstemps.c (mkstemps): Likewise. * misc/mkstemps64.c (mkstemps64): Likewise. * misc/mktemp.c (__mktemp): Likewise. * misc/preadv.c (preadv): Likewise. * misc/preadv64.c (preadv64): Likewise. * misc/pwritev.c (pwritev): Likewise. * misc/pwritev64.c (pwritev64): Likewise. * misc/readv.c (__readv): Likewise. * misc/revoke.c (revoke): Likewise. * misc/setdomain.c (setdomainname): Likewise. * misc/setegid.c (setegid): Likewise. * misc/seteuid.c (seteuid): Likewise. * misc/sethostid.c (sethostid): Likewise. * misc/sethostname.c (sethostname): Likewise. * misc/setregid.c (__setregid): Likewise. * misc/setreuid.c (__setreuid): Likewise. * misc/sstk.c (sstk): Likewise. * misc/stty.c (stty): Likewise. * misc/syscall.c (syscall): Likewise. * misc/syslog.c (setlogmask): Likewise. * misc/truncate.c (__truncate): Likewise. * misc/truncate64.c (truncate64): Likewise. * misc/ualarm.c (ualarm): Likewise. * misc/usleep.c (usleep): Likewise. * misc/ustat.c (ustat): Likewise. * misc/writev.c (__writev): Likewise. * nptl/cleanup_compat.c (_pthread_cleanup_pop): Likewise. * nptl/old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0): Likewise. * nptl/old_pthread_cond_destroy.c (__pthread_cond_destroy_2_0): Likewise. * nptl/old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise. * nptl/old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise. * nptl/pt-raise.c (raise): Likewise. * nptl/pthread_barrier_destroy.c (pthread_barrier_destroy): Likewise. * nptl/pthread_barrier_wait.c (__pthread_barrier_wait): Likewise. * nptl/pthread_barrierattr_destroy.c (pthread_barrierattr_destroy): Likewise. * nptl/pthread_barrierattr_init.c (pthread_barrierattr_init): Likewise. * nptl/pthread_barrierattr_setpshared.c (pthread_barrierattr_setpshared): Likewise. * nptl/pthread_cond_broadcast.c (__pthread_cond_broadcast): Likewise. * nptl/pthread_cond_destroy.c (__pthread_cond_destroy): Likewise. * nptl/pthread_cond_init.c (__pthread_cond_init): Likewise. * nptl/pthread_cond_signal.c (__pthread_cond_signal): Likewise. * nptl/pthread_condattr_destroy.c (__pthread_condattr_destroy): Likewise. * nptl/pthread_condattr_getclock.c (pthread_condattr_getclock): Likewise. * nptl/pthread_condattr_getpshared.c (pthread_condattr_getpshared): Likewise. * nptl/pthread_condattr_init.c (__pthread_condattr_init): Likewise. * nptl/pthread_condattr_setpshared.c (pthread_condattr_setpshared): Likewise. * nptl/pthread_detach.c (pthread_detach): Likewise. * nptl/pthread_equal.c (__pthread_equal): Likewise. * nptl/pthread_getcpuclockid.c (pthread_getcpuclockid): Likewise. * nptl/pthread_getspecific.c (__pthread_getspecific): Likewise. * nptl/pthread_key_delete.c (pthread_key_delete): Likewise. * nptl/pthread_mutex_consistent.c (pthread_mutex_consistent): Likewise. * nptl/pthread_mutex_destroy.c (__pthread_mutex_destroy): Likewise. * nptl/pthread_mutex_getprioceiling.c (pthread_mutex_getprioceiling): Likewise. * nptl/pthread_mutexattr_destroy.c (__pthread_mutexattr_destroy): Likewise. * nptl/pthread_mutexattr_getprotocol.c (pthread_mutexattr_getprotocol): Likewise. * nptl/pthread_mutexattr_getpshared.c (pthread_mutexattr_getpshared): Likewise. * nptl/pthread_mutexattr_getrobust.c (pthread_mutexattr_getrobust): Likewise. * nptl/pthread_mutexattr_gettype.c (pthread_mutexattr_gettype): Likewise. * nptl/pthread_mutexattr_init.c (__pthread_mutexattr_init): Likewise. * nptl/pthread_mutexattr_setprioceiling.c (pthread_mutexattr_setprioceiling): Likewise. * nptl/pthread_mutexattr_setprotocol.c (pthread_mutexattr_setprotocol): Likewise. * nptl/pthread_mutexattr_setpshared.c (pthread_mutexattr_setpshared): Likewise. * nptl/pthread_mutexattr_setrobust.c (pthread_mutexattr_setrobust): Likewise. * nptl/pthread_mutexattr_settype.c (__pthread_mutexattr_settype): Likewise. * nptl/pthread_rwlock_destroy.c (__pthread_rwlock_destroy): Likewise. * nptl/pthread_rwlockattr_destroy.c (pthread_rwlockattr_destroy): Likewise. * nptl/pthread_rwlockattr_getkind_np.c (pthread_rwlockattr_getkind_np): Likewise. * nptl/pthread_rwlockattr_getpshared.c (pthread_rwlockattr_getpshared): Likewise. * nptl/pthread_rwlockattr_init.c (pthread_rwlockattr_init): Likewise. * nptl/pthread_rwlockattr_setkind_np.c (pthread_rwlockattr_setkind_np): Likewise. * nptl/pthread_rwlockattr_setpshared.c (pthread_rwlockattr_setpshared): Likewise. * nptl/pthread_setcancelstate.c (__pthread_setcancelstate): Likewise. * nptl/pthread_setcanceltype.c (__pthread_setcanceltype): Likewise. * nptl/pthread_setconcurrency.c (pthread_setconcurrency): Likewise. * nptl/pthread_setschedprio.c (pthread_setschedprio): Likewise. * nptl/pthread_setspecific.c (__pthread_setspecific): Likewise. * nptl/pthread_spin_destroy.c (pthread_spin_destroy): Likewise. * nptl/pthread_tryjoin.c (pthread_tryjoin_np): Likewise. * nptl/sem_close.c (sem_close): Likewise. * nptl/sem_destroy.c (__new_sem_destroy): Likewise. * nptl/sem_init.c (__old_sem_init): Likewise. * nptl/sigaction.c (__sigaction): Likewise. * nptl/unregister-atfork.c (__unregister_atfork): Likewise. * posix/_exit.c (_exit): Likewise. * posix/alarm.c (alarm): Likewise. * posix/confstr.c (confstr): Likewise. * posix/fpathconf.c (__fpathconf): Likewise. * posix/getgroups.c (__getgroups): Likewise. * posix/getpgid.c (__getpgid): Likewise. * posix/group_member.c (__group_member): Likewise. * posix/pathconf.c (__pathconf): Likewise. * posix/sched_getaffinity.c (sched_getaffinity): Likewise. * posix/sched_setaffinity.c (sched_setaffinity): Likewise. * posix/setgid.c (__setgid): Likewise. * posix/setpgid.c (__setpgid): Likewise. * posix/setuid.c (__setuid): Likewise. * posix/sleep.c (__sleep): Likewise. * posix/sysconf.c (__sysconf): Likewise. * posix/times.c (__times): Likewise. * posix/uname.c (__uname): Likewise. * posix/waitid.c (__waitid): Likewise. * pwd/getpw.c (__getpw): Likewise. * resolv/base64.c (b64_pton): Likewise. * resolv/gai_sigqueue.c (__gai_sigqueue): Likewise. * resolv/gethnamaddr.c (Dprintf): Likewise. (gethostbyname): Likewise. (gethostbyname2): Likewise. (gethostbyaddr): Likewise. (_sethtent): Likewise. (_gethtbyname): Likewise. (_gethtbyname2): Likewise. (_gethtbyaddr): Likewise. (map_v4v6_address): Likewise. (map_v4v6_hostent): Likewise. (addrsort): Likewise. (ht_sethostent): Likewise. (ht_gethostbyname): Likewise. (ht_gethostbyaddr): Likewise. * resolv/inet_net_ntop.c (inet_net_ntop): Likewise. (inet_net_ntop_ipv4): Likewise. * resolv/inet_neta.c (inet_neta): Likewise. * resolv/inet_ntop.c (inet_ntop): Likewise. (inet_ntop4): Likewise. (inet_ntop6): Likewise. * resolv/inet_pton.c (__inet_pton): Likewise. (inet_pton4): Likewise. (inet_pton6): Likewise. * resolv/res_debug.c (loc_aton): Likewise. (loc_ntoa): Likewise. * resource/getpriority.c (__getpriority): Likewise. * resource/getrusage.c (__getrusage): Likewise. * resource/nice.c (nice): Likewise. * resource/setpriority.c (__setpriority): Likewise. * resource/setrlimit64.c (setrlimit64): Likewise. * resource/vlimit.c (vlimit): Likewise. * resource/vtimes.c (vtimes): Likewise. * rt/aio_error.c (aio_error): Likewise. * rt/aio_return.c (aio_return): Likewise. * rt/aio_sigqueue.c (__aio_sigqueue): Likewise. * signal/kill.c (__kill): Likewise. * signal/killpg.c (killpg): Likewise. * signal/raise.c (raise): Likewise. * signal/sigaction.c (__sigaction): Likewise. * signal/sigaddset.c (sigaddset): Likewise. * signal/sigaltstack.c (sigaltstack): Likewise. * signal/sigandset.c (sigandset): Likewise. * signal/sigblock.c (__sigblock): Likewise. * signal/sigdelset.c (sigdelset): Likewise. * signal/sigempty.c (sigemptyset): Likewise. * signal/sigfillset.c (sigfillset): Likewise. * signal/sighold.c (sighold): Likewise. * signal/sigignore.c (sigignore): Likewise. * signal/sigintr.c (siginterrupt): Likewise. * signal/sigisempty.c (sigisemptyset): Likewise. * signal/sigismem.c (sigismember): Likewise. * signal/signal.c (signal): Likewise. * signal/sigorset.c (sigorset): Likewise. * signal/sigpause.c (__sigpause): Likewise. * signal/sigpending.c (sigpending): Likewise. * signal/sigprocmask.c (__sigprocmask): Likewise. * signal/sigrelse.c (sigrelse): Likewise. * signal/sigreturn.c (__sigreturn): Likewise. * signal/sigset.c (sigset): Likewise. * signal/sigsetmask.c (__sigsetmask): Likewise. * signal/sigstack.c (sigstack): Likewise. * signal/sigsuspend.c (__sigsuspend): Likewise. * signal/sigvec.c (sigvec_wrapper_handler): Likewise. * signal/sysv_signal.c (__sysv_signal): Likewise. * socket/accept.c (accept): Likewise. * socket/accept4.c (__libc_accept4): Likewise. * socket/bind.c (__bind): Likewise. * socket/connect.c (__connect): Likewise. * socket/getpeername.c (getpeername): Likewise. * socket/getsockname.c (__getsockname): Likewise. * socket/getsockopt.c (getsockopt): Likewise. * socket/listen.c (__listen): Likewise. * socket/recv.c (__recv): Likewise. * socket/recvmsg.c (__recvmsg): Likewise. * socket/send.c (__send): Likewise. * socket/sendmsg.c (__sendmsg): Likewise. * socket/shutdown.c (shutdown): Likewise. * socket/sockatmark.c (sockatmark): Likewise. * socket/socket.c (__socket): Likewise. * stdio-common/ctermid.c (ctermid): Likewise. * stdio-common/cuserid.c (cuserid): Likewise. * stdio-common/printf-prs.c (parse_printf_format): Likewise. * stdio-common/remove.c (remove): Likewise. * stdio-common/rename.c (rename): Likewise. * stdio-common/renameat.c (renameat): Likewise. * stdio-common/tempname.c (__gen_tempname): Likewise. * stdio-common/xbug.c (InitBuffer): Likewise. (AppendToBuffer): Likewise. (ReadFile): Likewise. * stdlib/a64l.c (a64l): Likewise. * stdlib/drand48_r.c (drand48_r): Likewise. * stdlib/getcontext.c (getcontext): Likewise. * stdlib/getenv.c (getenv): Likewise. * stdlib/l64a.c (l64a): Likewise. * stdlib/llabs.c (llabs): Likewise. * stdlib/lldiv.c (lldiv): Likewise. * stdlib/lrand48_r.c (lrand48_r): Likewise. * stdlib/mrand48_r.c (mrand48_r): Likewise. * stdlib/putenv.c (putenv): Likewise. * stdlib/random.c (__srandom): Likewise. (__initstate): Likewise. (__setstate): Likewise. * stdlib/random_r.c (__srandom_r): Likewise. (__setstate_r): Likewise. (__random_r): Likewise. * stdlib/secure-getenv.c (__libc_secure_getenv): Likewise. * stdlib/setcontext.c (setcontext): Likewise. * stdlib/setenv.c (setenv): Likewise. (unsetenv): Likewise. * stdlib/srand48.c (srand48): Likewise. * stdlib/srand48_r.c (__srand48_r): Likewise. * stdlib/swapcontext.c (swapcontext): Likewise. * stdlib/system.c (__libc_system): Likewise. * stdlib/tst-strtod.c (expand): Likewise. * stdlib/tst-strtol.c (expand): Likewise. * stdlib/tst-strtoll.c (expand): Likewise. * streams/fattach.c (fattach): Likewise. * streams/fdetach.c (fdetach): Likewise. * streams/getmsg.c (getmsg): Likewise. * streams/isastream.c (isastream): Likewise. * string/ffs.c (__ffs): Likewise. * string/ffsll.c (ffsll): Likewise. * string/memcmp.c (memcmp_common_alignment): Likewise. (memcmp_not_common_alignment): Likewise. (MEMCMP): Likewise. * string/memcpy.c (memcpy): Likewise. * string/memmove.c (MEMMOVE): Likewise. * string/memset.c (memset): Likewise. * string/rawmemchr.c (RAWMEMCHR): Likewise. * string/strchrnul.c (STRCHRNUL): Likewise. * string/strerror.c (strerror): Likewise. * string/strndup.c (__strndup): Likewise. * string/strverscmp.c (__strverscmp): Likewise. * sunrpc/clnt_raw.c (clntraw_freeres): Likewise. * sunrpc/clnt_tcp.c (clnttcp_geterr): Likewise. (clnttcp_freeres): Likewise. * sunrpc/clnt_unix.c (clntunix_freeres): Likewise. * sunrpc/pmap_prot.c (xdr_pmap): Likewise. * sunrpc/pmap_prot2.c (xdr_pmaplist): Likewise. * sunrpc/pmap_rmt.c (xdr_rmtcallres): Likewise. * sunrpc/rpc_prot.c (xdr_replymsg): Likewise. (xdr_callhdr): Likewise. * sunrpc/rpcinfo.c (udpping): Likewise. (tcpping): Likewise. (pstatus): Likewise. (pmapdump): Likewise. (brdcst): Likewise. (deletereg): Likewise. (getprognum): Likewise. (getvers): Likewise. (get_inet_address): Likewise. * sunrpc/svc_raw.c (svcraw_recv): Likewise. * sunrpc/svc_udp.c (svcudp_create): Likewise. (svcudp_stat): Likewise. (svcudp_recv): Likewise. (svcudp_reply): Likewise. (svcudp_getargs): Likewise. (svcudp_freeargs): Likewise. (svcudp_destroy): Likewise. * sunrpc/xdr.c (xdr_bytes): Likewise. (xdr_netobj): Likewise. (xdr_string): Likewise. (xdr_wrapstring): Likewise. * sunrpc/xdr_float.c (xdr_float): Likewise. (xdr_double): Likewise. * sunrpc/xdr_mem.c (xdrmem_setpos): Likewise. * sunrpc/xdr_ref.c (xdr_pointer): Likewise. * sysvipc/ftok.c (ftok): Likewise. * sysvipc/msgctl.c (msgctl): Likewise. * sysvipc/msgget.c (msgget): Likewise. * sysvipc/msgrcv.c (msgrcv): Likewise. * sysvipc/msgsnd.c (msgsnd): Likewise. * sysvipc/semget.c (semget): Likewise. * sysvipc/semop.c (semop): Likewise. * sysvipc/shmat.c (shmat): Likewise. * sysvipc/shmctl.c (shmctl): Likewise. * sysvipc/shmdt.c (shmdt): Likewise. * sysvipc/shmget.c (shmget): Likewise. * termios/cfmakeraw.c (cfmakeraw): Likewise. * termios/speed.c (cfgetospeed): Likewise. (cfgetispeed): Likewise. (cfsetospeed): Likewise. (cfsetispeed): Likewise. * termios/tcflow.c (tcflow): Likewise. * termios/tcflush.c (tcflush): Likewise. * termios/tcgetattr.c (__tcgetattr): Likewise. * termios/tcgetpgrp.c (tcgetpgrp): Likewise. * termios/tcgetsid.c (tcgetsid): Likewise. * termios/tcsendbrk.c (tcsendbreak): Likewise. * termios/tcsetpgrp.c (tcsetpgrp): Likewise. * time/adjtime.c (__adjtime): Likewise. * time/dysize.c (dysize): Likewise. * time/ftime.c (ftime): Likewise. * time/getitimer.c (__getitimer): Likewise. * time/gettimeofday.c (__gettimeofday): Likewise. * time/gmtime.c (__gmtime_r): Likewise. (gmtime): Likewise. * time/localtime.c (__localtime_r): Likewise. (localtime): Likewise. * time/offtime.c (__offtime): Likewise. * time/settimeofday.c (__settimeofday): Likewise. * time/stime.c (stime): Likewise. * time/strftime_l.c (tm_diff): Likewise. (iso_week_days): Likewise. * time/strptime.c (strptime): Likewise. * time/time.c (time): Likewise. * time/timespec_get.c (timespec_get): Likewise. * time/tzset.c (tzset_internal): Likewise. (compute_change): Likewise. (__tz_compute): Likewise. * wcsmbs/btowc.c (__btowc): Likewise. * wcsmbs/mbrlen.c (__mbrlen): Likewise. * wcsmbs/mbsinit.c (__mbsinit): Likewise. * wcsmbs/mbsrtowcs.c (__mbsrtowcs): Likewise. * wcsmbs/wcpcpy.c (__wcpcpy): Likewise. * wcsmbs/wcpncpy.c (__wcpncpy): Likewise. * wcsmbs/wcscat.c (__wcscat): Likewise. * wcsmbs/wcschrnul.c (__wcschrnul): Likewise. * wcsmbs/wcscmp.c (WCSCMP): Likewise. * wcsmbs/wcscpy.c (WCSCPY): Likewise. * wcsmbs/wcscspn.c (wcscspn): Likewise. * wcsmbs/wcsdup.c (wcsdup): Likewise. * wcsmbs/wcslen.c (__wcslen): Likewise. * wcsmbs/wcsncat.c (WCSNCAT): Likewise. * wcsmbs/wcsncmp.c (WCSNCMP): Likewise. * wcsmbs/wcsncpy.c (__wcsncpy): Likewise. * wcsmbs/wcsnlen.c (__wcsnlen): Likewise. * wcsmbs/wcspbrk.c (wcspbrk): Likewise. * wcsmbs/wcsrchr.c (WCSRCHR): Likewise. * wcsmbs/wcsspn.c (wcsspn): Likewise. * wcsmbs/wcsstr.c (wcsstr): Likewise. * wcsmbs/wcstok.c (wcstok): Likewise. * wcsmbs/wctob.c (wctob): Likewise. * wcsmbs/wmemchr.c (__wmemchr): Likewise. * wcsmbs/wmemcmp.c (WMEMCMP): Likewise. * wcsmbs/wmemcpy.c (__wmemcpy): Likewise. * wcsmbs/wmemmove.c (__wmemmove): Likewise. * wcsmbs/wmempcpy.c (__wmempcpy): Likewise. * wcsmbs/wmemset.c (__wmemset): Likewise. * wctype/wcfuncs.c (__towlower): Likewise. (__towupper): Likewise.
740 lines
18 KiB
C
740 lines
18 KiB
C
/*
|
|
* Copyright (c) 2010, Oracle America, Inc.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the following
|
|
* disclaimer in the documentation and/or other materials
|
|
* provided with the distribution.
|
|
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
|
* contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
/*
|
|
* rpcinfo: ping a particular rpc program
|
|
* or dump the portmapper
|
|
*/
|
|
|
|
#include <getopt.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <rpc/rpc.h>
|
|
#include <stdio.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <arpa/inet.h>
|
|
#include <netdb.h>
|
|
#include <rpc/pmap_prot.h>
|
|
#include <rpc/pmap_clnt.h>
|
|
#include <signal.h>
|
|
#include <ctype.h>
|
|
#include <locale.h>
|
|
#include <libintl.h>
|
|
|
|
#include "../version.h"
|
|
#define PACKAGE _libc_intl_domainname
|
|
|
|
#define MAXHOSTLEN 256
|
|
|
|
#define MIN_VERS ((u_long) 0)
|
|
#define MAX_VERS ((u_long) 4294967295UL)
|
|
|
|
static void udpping (u_short portflag, int argc, char **argv);
|
|
static void tcpping (u_short portflag, int argc, char **argv);
|
|
static int pstatus (CLIENT *client, u_long prognum, u_long vers);
|
|
static void pmapdump (int argc, char **argv);
|
|
static bool_t reply_proc (void *res, struct sockaddr_in *who);
|
|
static void brdcst (int argc, char **argv) __attribute__ ((noreturn));
|
|
static void deletereg (int argc, char **argv);
|
|
static void usage (FILE *stream);
|
|
static void print_version (void);
|
|
static u_long getprognum (char *arg);
|
|
static u_long getvers (char *arg);
|
|
static void get_inet_address (struct sockaddr_in *addr, char *host);
|
|
|
|
/*
|
|
* Functions to be performed.
|
|
*/
|
|
#define NONE 0 /* no function */
|
|
#define PMAPDUMP 1 /* dump portmapper registrations */
|
|
#define TCPPING 2 /* ping TCP service */
|
|
#define UDPPING 3 /* ping UDP service */
|
|
#define BRDCST 4 /* ping broadcast UDP service */
|
|
#define DELETES 5 /* delete registration for the service */
|
|
|
|
int
|
|
main (int argc, char **argv)
|
|
{
|
|
register int c;
|
|
int errflg;
|
|
int function;
|
|
u_short portnum;
|
|
static const struct option long_options[] = {
|
|
{ "help", no_argument, NULL, 'H' },
|
|
{ "version", no_argument, NULL, 'V' },
|
|
{ NULL, 0, NULL, 0 }
|
|
};
|
|
|
|
setlocale (LC_ALL, "");
|
|
textdomain (_libc_intl_domainname);
|
|
|
|
function = NONE;
|
|
portnum = 0;
|
|
errflg = 0;
|
|
while ((c = getopt_long (argc, argv, "ptubdn:", long_options, NULL)) != -1)
|
|
{
|
|
switch (c)
|
|
{
|
|
|
|
case 'p':
|
|
if (function != NONE)
|
|
errflg = 1;
|
|
else
|
|
function = PMAPDUMP;
|
|
break;
|
|
|
|
case 't':
|
|
if (function != NONE)
|
|
errflg = 1;
|
|
else
|
|
function = TCPPING;
|
|
break;
|
|
|
|
case 'u':
|
|
if (function != NONE)
|
|
errflg = 1;
|
|
else
|
|
function = UDPPING;
|
|
break;
|
|
|
|
case 'b':
|
|
if (function != NONE)
|
|
errflg = 1;
|
|
else
|
|
function = BRDCST;
|
|
break;
|
|
|
|
case 'n':
|
|
portnum = (u_short) atoi (optarg); /* hope we don't get bogus # */
|
|
break;
|
|
|
|
case 'd':
|
|
if (function != NONE)
|
|
errflg = 1;
|
|
else
|
|
function = DELETES;
|
|
break;
|
|
|
|
case 'H':
|
|
usage (stdout);
|
|
return 0;
|
|
|
|
case 'V':
|
|
print_version ();
|
|
return 0;
|
|
|
|
case '?':
|
|
errflg = 1;
|
|
}
|
|
}
|
|
|
|
if (errflg || function == NONE)
|
|
{
|
|
usage (stderr);
|
|
return 1;
|
|
}
|
|
|
|
switch (function)
|
|
{
|
|
|
|
case PMAPDUMP:
|
|
if (portnum != 0)
|
|
{
|
|
usage (stderr);
|
|
return 1;
|
|
}
|
|
pmapdump (argc - optind, argv + optind);
|
|
break;
|
|
|
|
case UDPPING:
|
|
udpping (portnum, argc - optind, argv + optind);
|
|
break;
|
|
|
|
case TCPPING:
|
|
tcpping (portnum, argc - optind, argv + optind);
|
|
break;
|
|
|
|
case BRDCST:
|
|
if (portnum != 0)
|
|
{
|
|
usage (stderr);
|
|
return 1;
|
|
}
|
|
brdcst (argc - optind, argv + optind);
|
|
break;
|
|
|
|
case DELETES:
|
|
deletereg (argc - optind, argv + optind);
|
|
break;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static void
|
|
udpping (u_short portnum, int argc, char **argv)
|
|
{
|
|
struct timeval to;
|
|
struct sockaddr_in addr;
|
|
enum clnt_stat rpc_stat;
|
|
CLIENT *client;
|
|
u_long prognum, vers, minvers, maxvers;
|
|
int sock = RPC_ANYSOCK;
|
|
struct rpc_err rpcerr;
|
|
int failure;
|
|
|
|
if (argc < 2 || argc > 3)
|
|
{
|
|
usage (stderr);
|
|
exit (1);
|
|
}
|
|
prognum = getprognum (argv[1]);
|
|
get_inet_address (&addr, argv[0]);
|
|
/* Open the socket here so it will survive calls to clnt_destroy */
|
|
sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
|
if (sock < 0)
|
|
{
|
|
perror ("rpcinfo: socket");
|
|
exit (1);
|
|
}
|
|
failure = 0;
|
|
if (argc == 2)
|
|
{
|
|
/*
|
|
* A call to version 0 should fail with a program/version
|
|
* mismatch, and give us the range of versions supported.
|
|
*/
|
|
addr.sin_port = htons (portnum);
|
|
to.tv_sec = 5;
|
|
to.tv_usec = 0;
|
|
if ((client = clntudp_create (&addr, prognum, (u_long) 0,
|
|
to, &sock)) == NULL)
|
|
{
|
|
clnt_pcreateerror ("rpcinfo");
|
|
printf (_("program %lu is not available\n"), prognum);
|
|
exit (1);
|
|
}
|
|
to.tv_sec = 10;
|
|
to.tv_usec = 0;
|
|
rpc_stat = clnt_call (client, NULLPROC, (xdrproc_t) xdr_void,
|
|
(char *) NULL, (xdrproc_t) xdr_void,
|
|
(char *) NULL, to);
|
|
if (rpc_stat == RPC_PROGVERSMISMATCH)
|
|
{
|
|
clnt_geterr (client, &rpcerr);
|
|
minvers = rpcerr.re_vers.low;
|
|
maxvers = rpcerr.re_vers.high;
|
|
}
|
|
else if (rpc_stat == RPC_SUCCESS)
|
|
{
|
|
/*
|
|
* Oh dear, it DOES support version 0.
|
|
* Let's try version MAX_VERS.
|
|
*/
|
|
addr.sin_port = htons (portnum);
|
|
to.tv_sec = 5;
|
|
to.tv_usec = 0;
|
|
if ((client = clntudp_create (&addr, prognum, MAX_VERS,
|
|
to, &sock)) == NULL)
|
|
{
|
|
clnt_pcreateerror ("rpcinfo");
|
|
printf (_("program %lu version %lu is not available\n"),
|
|
prognum, MAX_VERS);
|
|
exit (1);
|
|
}
|
|
to.tv_sec = 10;
|
|
to.tv_usec = 0;
|
|
rpc_stat = clnt_call (client, NULLPROC, (xdrproc_t) xdr_void,
|
|
NULL, (xdrproc_t) xdr_void, NULL, to);
|
|
if (rpc_stat == RPC_PROGVERSMISMATCH)
|
|
{
|
|
clnt_geterr (client, &rpcerr);
|
|
minvers = rpcerr.re_vers.low;
|
|
maxvers = rpcerr.re_vers.high;
|
|
}
|
|
else if (rpc_stat == RPC_SUCCESS)
|
|
{
|
|
/*
|
|
* It also supports version MAX_VERS.
|
|
* Looks like we have a wise guy.
|
|
* OK, we give them information on all
|
|
* 4 billion versions they support...
|
|
*/
|
|
minvers = 0;
|
|
maxvers = MAX_VERS;
|
|
}
|
|
else
|
|
{
|
|
(void) pstatus (client, prognum, MAX_VERS);
|
|
exit (1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
(void) pstatus (client, prognum, (u_long) 0);
|
|
exit (1);
|
|
}
|
|
clnt_destroy (client);
|
|
for (vers = minvers; vers <= maxvers; vers++)
|
|
{
|
|
addr.sin_port = htons (portnum);
|
|
to.tv_sec = 5;
|
|
to.tv_usec = 0;
|
|
if ((client = clntudp_create (&addr, prognum, vers,
|
|
to, &sock)) == NULL)
|
|
{
|
|
clnt_pcreateerror ("rpcinfo");
|
|
printf (_("program %lu version %lu is not available\n"),
|
|
prognum, vers);
|
|
exit (1);
|
|
}
|
|
to.tv_sec = 10;
|
|
to.tv_usec = 0;
|
|
rpc_stat = clnt_call (client, NULLPROC, (xdrproc_t) xdr_void,
|
|
NULL, (xdrproc_t) xdr_void, NULL, to);
|
|
if (pstatus (client, prognum, vers) < 0)
|
|
failure = 1;
|
|
clnt_destroy (client);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
vers = getvers (argv[2]);
|
|
addr.sin_port = htons (portnum);
|
|
to.tv_sec = 5;
|
|
to.tv_usec = 0;
|
|
if ((client = clntudp_create (&addr, prognum, vers,
|
|
to, &sock)) == NULL)
|
|
{
|
|
clnt_pcreateerror ("rpcinfo");
|
|
printf (_("program %lu version %lu is not available\n"),
|
|
prognum, vers);
|
|
exit (1);
|
|
}
|
|
to.tv_sec = 10;
|
|
to.tv_usec = 0;
|
|
rpc_stat = clnt_call (client, 0, (xdrproc_t) xdr_void, NULL,
|
|
(xdrproc_t) xdr_void, NULL, to);
|
|
if (pstatus (client, prognum, vers) < 0)
|
|
failure = 1;
|
|
}
|
|
(void) close (sock); /* Close it up again */
|
|
if (failure)
|
|
exit (1);
|
|
}
|
|
|
|
static void
|
|
tcpping (u_short portnum, int argc, char **argv)
|
|
{
|
|
struct timeval to;
|
|
struct sockaddr_in addr;
|
|
enum clnt_stat rpc_stat;
|
|
CLIENT *client;
|
|
u_long prognum, vers, minvers, maxvers;
|
|
int sock = RPC_ANYSOCK;
|
|
struct rpc_err rpcerr;
|
|
int failure;
|
|
|
|
if (argc < 2 || argc > 3)
|
|
{
|
|
usage (stderr);
|
|
exit (1);
|
|
}
|
|
prognum = getprognum (argv[1]);
|
|
get_inet_address (&addr, argv[0]);
|
|
failure = 0;
|
|
if (argc == 2)
|
|
{
|
|
/*
|
|
* A call to version 0 should fail with a program/version
|
|
* mismatch, and give us the range of versions supported.
|
|
*/
|
|
addr.sin_port = htons (portnum);
|
|
if ((client = clnttcp_create (&addr, prognum, MIN_VERS,
|
|
&sock, 0, 0)) == NULL)
|
|
{
|
|
clnt_pcreateerror ("rpcinfo");
|
|
printf (_("program %lu is not available\n"), prognum);
|
|
exit (1);
|
|
}
|
|
to.tv_sec = 10;
|
|
to.tv_usec = 0;
|
|
rpc_stat = clnt_call (client, NULLPROC, (xdrproc_t) xdr_void, NULL,
|
|
(xdrproc_t) xdr_void, NULL, to);
|
|
if (rpc_stat == RPC_PROGVERSMISMATCH)
|
|
{
|
|
clnt_geterr (client, &rpcerr);
|
|
minvers = rpcerr.re_vers.low;
|
|
maxvers = rpcerr.re_vers.high;
|
|
}
|
|
else if (rpc_stat == RPC_SUCCESS)
|
|
{
|
|
/*
|
|
* Oh dear, it DOES support version 0.
|
|
* Let's try version MAX_VERS.
|
|
*/
|
|
addr.sin_port = htons (portnum);
|
|
if ((client = clnttcp_create (&addr, prognum, MAX_VERS,
|
|
&sock, 0, 0)) == NULL)
|
|
{
|
|
clnt_pcreateerror ("rpcinfo");
|
|
printf (_("program %lu version %lu is not available\n"),
|
|
prognum, MAX_VERS);
|
|
exit (1);
|
|
}
|
|
to.tv_sec = 10;
|
|
to.tv_usec = 0;
|
|
rpc_stat = clnt_call (client, NULLPROC, (xdrproc_t) xdr_void,
|
|
NULL, (xdrproc_t) xdr_void, NULL, to);
|
|
if (rpc_stat == RPC_PROGVERSMISMATCH)
|
|
{
|
|
clnt_geterr (client, &rpcerr);
|
|
minvers = rpcerr.re_vers.low;
|
|
maxvers = rpcerr.re_vers.high;
|
|
}
|
|
else if (rpc_stat == RPC_SUCCESS)
|
|
{
|
|
/*
|
|
* It also supports version MAX_VERS.
|
|
* Looks like we have a wise guy.
|
|
* OK, we give them information on all
|
|
* 4 billion versions they support...
|
|
*/
|
|
minvers = 0;
|
|
maxvers = MAX_VERS;
|
|
}
|
|
else
|
|
{
|
|
(void) pstatus (client, prognum, MAX_VERS);
|
|
exit (1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
(void) pstatus (client, prognum, MIN_VERS);
|
|
exit (1);
|
|
}
|
|
clnt_destroy (client);
|
|
(void) close (sock);
|
|
sock = RPC_ANYSOCK; /* Re-initialize it for later */
|
|
for (vers = minvers; vers <= maxvers; vers++)
|
|
{
|
|
addr.sin_port = htons (portnum);
|
|
if ((client = clnttcp_create (&addr, prognum, vers,
|
|
&sock, 0, 0)) == NULL)
|
|
{
|
|
clnt_pcreateerror ("rpcinfo");
|
|
printf (_("program %lu version %lu is not available\n"),
|
|
prognum, vers);
|
|
exit (1);
|
|
}
|
|
to.tv_usec = 0;
|
|
to.tv_sec = 10;
|
|
rpc_stat = clnt_call (client, 0, (xdrproc_t) xdr_void, NULL,
|
|
(xdrproc_t) xdr_void, NULL, to);
|
|
if (pstatus (client, prognum, vers) < 0)
|
|
failure = 1;
|
|
clnt_destroy (client);
|
|
(void) close (sock);
|
|
sock = RPC_ANYSOCK;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
vers = getvers (argv[2]);
|
|
addr.sin_port = htons (portnum);
|
|
if ((client = clnttcp_create (&addr, prognum, vers, &sock,
|
|
0, 0)) == NULL)
|
|
{
|
|
clnt_pcreateerror ("rpcinfo");
|
|
printf (_("program %lu version %lu is not available\n"),
|
|
prognum, vers);
|
|
exit (1);
|
|
}
|
|
to.tv_usec = 0;
|
|
to.tv_sec = 10;
|
|
rpc_stat = clnt_call (client, 0, (xdrproc_t) xdr_void, NULL,
|
|
(xdrproc_t) xdr_void, NULL, to);
|
|
if (pstatus (client, prognum, vers) < 0)
|
|
failure = 1;
|
|
}
|
|
if (failure)
|
|
exit (1);
|
|
}
|
|
|
|
/*
|
|
* This routine should take a pointer to an "rpc_err" structure, rather than
|
|
* a pointer to a CLIENT structure, but "clnt_perror" takes a pointer to
|
|
* a CLIENT structure rather than a pointer to an "rpc_err" structure.
|
|
* As such, we have to keep the CLIENT structure around in order to print
|
|
* a good error message.
|
|
*/
|
|
static int
|
|
pstatus (register CLIENT *client, u_long prognum, u_long vers)
|
|
{
|
|
struct rpc_err rpcerr;
|
|
|
|
clnt_geterr (client, &rpcerr);
|
|
if (rpcerr.re_status != RPC_SUCCESS)
|
|
{
|
|
clnt_perror (client, "rpcinfo");
|
|
printf (_("program %lu version %lu is not available\n"), prognum, vers);
|
|
return -1;
|
|
}
|
|
else
|
|
{
|
|
printf (_("program %lu version %lu ready and waiting\n"), prognum, vers);
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
static void
|
|
pmapdump (int argc, char **argv)
|
|
{
|
|
struct sockaddr_in server_addr;
|
|
register struct hostent *hp;
|
|
struct pmaplist *head = NULL;
|
|
int socket = RPC_ANYSOCK;
|
|
struct timeval minutetimeout;
|
|
register CLIENT *client;
|
|
struct rpcent *rpc;
|
|
|
|
if (argc > 1)
|
|
{
|
|
usage (stderr);
|
|
exit (1);
|
|
}
|
|
if (argc == 1)
|
|
get_inet_address (&server_addr, argv[0]);
|
|
else
|
|
{
|
|
bzero ((char *) &server_addr, sizeof server_addr);
|
|
server_addr.sin_family = AF_INET;
|
|
if ((hp = gethostbyname ("localhost")) != NULL)
|
|
memcpy ((caddr_t) & server_addr.sin_addr, hp->h_addr,
|
|
hp->h_length);
|
|
else
|
|
server_addr.sin_addr.s_addr = inet_addr ("0.0.0.0");
|
|
}
|
|
minutetimeout.tv_sec = 60;
|
|
minutetimeout.tv_usec = 0;
|
|
server_addr.sin_port = htons (PMAPPORT);
|
|
if ((client = clnttcp_create (&server_addr, PMAPPROG,
|
|
PMAPVERS, &socket, 50, 500)) == NULL)
|
|
{
|
|
clnt_pcreateerror (_("rpcinfo: can't contact portmapper"));
|
|
exit (1);
|
|
}
|
|
if (clnt_call (client, PMAPPROC_DUMP, (xdrproc_t) xdr_void, NULL,
|
|
(xdrproc_t) xdr_pmaplist, (caddr_t) &head,
|
|
minutetimeout) != RPC_SUCCESS)
|
|
{
|
|
fputs (_("rpcinfo: can't contact portmapper"), stderr);
|
|
fputs (": ", stderr);
|
|
clnt_perror (client, "rpcinfo");
|
|
exit (1);
|
|
}
|
|
if (head == NULL)
|
|
{
|
|
fputs (_("No remote programs registered.\n"), stdout);
|
|
}
|
|
else
|
|
{
|
|
fputs (_(" program vers proto port\n"), stdout);
|
|
for (; head != NULL; head = head->pml_next)
|
|
{
|
|
printf ("%10ld%5ld",
|
|
head->pml_map.pm_prog,
|
|
head->pml_map.pm_vers);
|
|
if (head->pml_map.pm_prot == IPPROTO_UDP)
|
|
printf ("%6s", "udp");
|
|
else if (head->pml_map.pm_prot == IPPROTO_TCP)
|
|
printf ("%6s", "tcp");
|
|
else
|
|
printf ("%6ld", head->pml_map.pm_prot);
|
|
printf ("%7ld", head->pml_map.pm_port);
|
|
rpc = getrpcbynumber (head->pml_map.pm_prog);
|
|
if (rpc)
|
|
printf (" %s\n", rpc->r_name);
|
|
else
|
|
printf ("\n");
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
* reply_proc collects replies from the broadcast.
|
|
* to get a unique list of responses the output of rpcinfo should
|
|
* be piped through sort(1) and then uniq(1).
|
|
*/
|
|
|
|
/*ARGSUSED */
|
|
static bool_t
|
|
reply_proc (res, who)
|
|
void *res; /* Nothing comes back */
|
|
struct sockaddr_in *who; /* Who sent us the reply */
|
|
{
|
|
register struct hostent *hp;
|
|
|
|
hp = gethostbyaddr ((char *) &who->sin_addr, sizeof who->sin_addr,
|
|
AF_INET);
|
|
printf ("%s %s\n", inet_ntoa (who->sin_addr),
|
|
(hp == NULL) ? _("(unknown)") : hp->h_name);
|
|
return FALSE;
|
|
}
|
|
|
|
static void
|
|
brdcst (int argc, char **argv)
|
|
{
|
|
enum clnt_stat rpc_stat;
|
|
u_long prognum, vers;
|
|
|
|
if (argc != 2)
|
|
{
|
|
usage (stderr);
|
|
exit (1);
|
|
}
|
|
prognum = getprognum (argv[0]);
|
|
vers = getvers (argv[1]);
|
|
rpc_stat = clnt_broadcast (prognum, vers, NULLPROC, (xdrproc_t) xdr_void,
|
|
NULL, (xdrproc_t) xdr_void, NULL,
|
|
(resultproc_t) reply_proc);
|
|
if ((rpc_stat != RPC_SUCCESS) && (rpc_stat != RPC_TIMEDOUT))
|
|
{
|
|
fprintf (stderr, _("rpcinfo: broadcast failed: %s\n"),
|
|
clnt_sperrno (rpc_stat));
|
|
exit (1);
|
|
}
|
|
exit (0);
|
|
}
|
|
|
|
static void
|
|
deletereg (int argc, char **argv)
|
|
{
|
|
u_long prog_num, version_num;
|
|
|
|
if (argc != 2)
|
|
{
|
|
usage (stderr);
|
|
exit (1);
|
|
}
|
|
if (getuid ())
|
|
{ /* This command allowed only to root */
|
|
fputs (_("Sorry. You are not root\n"), stderr);
|
|
exit (1);
|
|
}
|
|
prog_num = getprognum (argv[0]);
|
|
version_num = getvers (argv[1]);
|
|
if ((pmap_unset (prog_num, version_num)) == 0)
|
|
{
|
|
fprintf (stderr, _("rpcinfo: Could not delete registration for prog %s version %s\n"),
|
|
argv[0], argv[1]);
|
|
exit (1);
|
|
}
|
|
}
|
|
|
|
static void
|
|
usage (FILE *stream)
|
|
{
|
|
fputs (_("Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n"),
|
|
stream);
|
|
fputs (_(" rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n"),
|
|
stream);
|
|
fputs (_(" rpcinfo -p [ host ]\n"), stream);
|
|
fputs (_(" rpcinfo -b prognum versnum\n"), stream);
|
|
fputs (_(" rpcinfo -d prognum versnum\n"), stream);
|
|
fputc ('\n', stream);
|
|
fprintf (stream, _("\
|
|
For bug reporting instructions, please see:\n\
|
|
%s.\n"), REPORT_BUGS_TO);
|
|
}
|
|
|
|
static void
|
|
print_version (void)
|
|
{
|
|
printf ("rpcinfo %s%s\n", PKGVERSION, VERSION);
|
|
}
|
|
|
|
static u_long
|
|
getprognum (char *arg)
|
|
{
|
|
register struct rpcent *rpc;
|
|
register u_long prognum;
|
|
|
|
if (isalpha (*arg))
|
|
{
|
|
rpc = getrpcbyname (arg);
|
|
if (rpc == NULL)
|
|
{
|
|
fprintf (stderr, _("rpcinfo: %s is unknown service\n"), arg);
|
|
exit (1);
|
|
}
|
|
prognum = rpc->r_number;
|
|
}
|
|
else
|
|
{
|
|
prognum = (u_long) atoi (arg);
|
|
}
|
|
|
|
return prognum;
|
|
}
|
|
|
|
static u_long
|
|
getvers (char *arg)
|
|
{
|
|
register u_long vers;
|
|
|
|
vers = (int) atoi (arg);
|
|
return vers;
|
|
}
|
|
|
|
static void
|
|
get_inet_address (struct sockaddr_in *addr, char *host)
|
|
{
|
|
register struct hostent *hp;
|
|
|
|
bzero ((char *) addr, sizeof *addr);
|
|
addr->sin_addr.s_addr = (u_long) inet_addr (host);
|
|
if (addr->sin_addr.s_addr == INADDR_NONE
|
|
|| addr->sin_addr.s_addr == INADDR_ANY)
|
|
{
|
|
if ((hp = gethostbyname (host)) == NULL)
|
|
{
|
|
fprintf (stderr, _("rpcinfo: %s is unknown host\n"),
|
|
host);
|
|
exit (1);
|
|
}
|
|
memmove ((char *) &addr->sin_addr, hp->h_addr, hp->h_length);
|
|
}
|
|
addr->sin_family = AF_INET;
|
|
}
|