コード例 #1
0
int
main(int argc, char *argv[])
{
    char *tty_libc, *tty_sudo;
    int rval = 0;

    initprogname(argc > 0 ? argv[0] : "check_ttyname");

    /* Lookup tty name via libc. */
    if ((tty_libc = ttyname(STDIN_FILENO)) == NULL &&
	(tty_libc = ttyname(STDOUT_FILENO)) == NULL &&
	(tty_libc = ttyname(STDERR_FILENO)) == NULL)
	tty_libc = "none";
    tty_libc = estrdup(tty_libc);

    /* Lookup tty name via sudo (using kernel info if possible). */
    if ((tty_sudo = get_process_ttyname()) == NULL)
	tty_sudo = estrdup("none");

    if (strcmp(tty_libc, "none") == 0) {
	printf("%s: SKIP (%s)\n", getprogname(), tty_sudo);
    } else if (strcmp(tty_libc, tty_sudo) == 0) {
	printf("%s: OK (%s)\n", getprogname(), tty_sudo);
    } else {
	printf("%s: FAIL %s (sudo) vs. %s (libc)\n", getprogname(),
	    tty_sudo, tty_libc);
	rval = 1;
    }

    efree(tty_libc);
    efree(tty_sudo);
    exit(rval);
}
コード例 #2
0
ファイル: check_ttyname.c プロジェクト: millert/sudo
int
main(int argc, char *argv[])
{
    char *tty_libc = NULL, *tty_sudo = NULL;
    char pathbuf[PATH_MAX];
    int ret = 1;

    initprogname(argc > 0 ? argv[0] : "check_ttyname");

    /* Lookup tty name using kernel info if possible. */
    if (get_process_ttyname(pathbuf, sizeof(pathbuf)) != NULL)
	tty_sudo = pathbuf;

#if defined(HAVE_KINFO_PROC2_NETBSD) || \
    defined(HAVE_KINFO_PROC_OPENBSD) || \
    defined(HAVE_KINFO_PROC_FREEBSD) || \
    defined(HAVE_KINFO_PROC_44BSD) || \
    defined(HAVE__TTYNAME_DEV) || defined(HAVE_STRUCT_PSINFO_PR_TTYDEV) || \
    defined(HAVE_PSTAT_GETPROC) || defined(__linux__)

    /* Lookup tty name attached to stdin via libc. */
    tty_libc = ttyname(STDIN_FILENO);
#endif

    /* Compare libc and kernel ttys. */
    if (tty_libc != NULL && tty_sudo != NULL) {
	if (strcmp(tty_libc, tty_sudo) == 0)
	    ret = 0;
    } else if (tty_libc == NULL && tty_sudo == NULL) {
	ret = 0;
    }

    if (ret == 0) {
	printf("%s: OK (%s)\n", getprogname(), tty_sudo ? tty_sudo : "none");
    } else if (tty_libc == NULL) {
	printf("%s: SKIP (%s)\n", getprogname(), tty_sudo ? tty_sudo : "none");
	ret = 0;
    } else {
	printf("%s: FAIL %s (sudo) vs. %s (libc)\n", getprogname(),
	    tty_sudo ? tty_sudo : "none", tty_libc ? tty_libc : "none");
    }

    return ret;
}