uint_t la_version(uint_t version) { if (version < LAV_CURRENT) { (void) fprintf(stderr, "symbindrep.so: unexpected version: %d\n", version); return (0); } build_env_list(&bindto_list, (const char *)"SYMBINDREP_BINDTO"); build_env_list(&bindfrom_list, (const char *)"SYMBINDREP_BINDFROM"); #ifdef _LP64 (void) fprintf(output, " Symbol Bindings\n\n" "Referencing Defining\n" "Object Object Symbol\n" "---------------------------------------------------------------" "-------------------\n"); #else (void) fprintf(output, " Symbol Bindings\n\n" "Referencing Defining\n" "Object Object Symbol\n" "---------------------------------------------------------------" "---\n"); #endif return (LAV_CURRENT); }
uint_t la_version(uint_t version) { int fd; sigset_t mask; if (version < LAV_CURRENT) { (void) fprintf(stderr, "audit.so.1: unexpected version: %d\n", version); return (0); } build_env_list(&bindto_list, (const char *)"AUDIT_BINDTO"); build_env_list(&bindfrom_list, (const char *)"AUDIT_BINDFROM"); if (checkenv((const char *)"AUDIT_PID")) { pidout = 1; pid = getpid(); } else { char *str = "LD_AUDIT="; /* * This disables truss output in subsequent fork()/exec * processes. */ (void) putenv(str); } if (checkenv((const char *)"AUDIT_NOEXIT")) { noexit++; indent = 0; } (void) sigfillset(&iset); return (LAV_CURRENT); }
t_sh *create_shell_from(char **environ_tab) { t_sh *shell; if ((shell = (t_sh *)malloc(sizeof(t_sh)))) { shell->env = build_env_list(environ_tab); ensure_pwd(shell); shell->mock = NULL; shell->l_env = NULL; shell->l_env = override_last_environ(shell); shell->ps1 = ft_strdup(PROMPT); shell->len_ps1 = ft_strlen(PROMPT); shell->l_ret = 0; shell->l_cmd = NULL; shell->buf = NULL; shell->exit = 0; return (shell); } return (NULL); }
uint_t la_version(uint_t version) { char *str; FILE *fp; if (version > LAV_CURRENT) (void) fprintf(stderr, dgettext(TEXT_DOMAIN, "apptrace: unexpected version: %u\n"), version); build_env_list(&bindto_list, "APPTRACE_BINDTO"); build_env_list(&bindto_excl, "APPTRACE_BINDTO_EXCLUDE"); build_env_list(&bindfrom_list, "APPTRACE_BINDFROM"); build_env_list(&bindfrom_excl, "APPTRACE_BINDFROM_EXCLUDE"); if (checkenv("APPTRACE_PID") != NULL) { pidout = 1; } else { char *str = "LD_AUDIT="; char *str2 = "LD_AUDIT64="; /* * This disables apptrace output in subsequent exec'ed * processes. */ (void) putenv(str); (void) putenv(str2); } if ((str = checkenv("APPTRACE_OUTPUT")) != NULL) { int fd, newfd, targetfd, lowerlimit; struct rlimit rl; if (getrlimit(RLIMIT_NOFILE, &rl) == -1) { (void) fprintf(stderr, dgettext(TEXT_DOMAIN, "apptrace: getrlimit: %s\n"), strerror(errno)); exit(EXIT_FAILURE); } fd = open(str, O_WRONLY|O_CREAT|O_TRUNC, 0666); if (fd == -1) { (void) fprintf(stderr, dgettext(TEXT_DOMAIN, "apptrace: %s: %s\n"), str, strerror(errno)); exit(EXIT_FAILURE); } /* * Those fans of dup2 should note that dup2 cannot * be used below because dup2 closes the target file * descriptor. Thus, if we're apptracing say, ksh * we'd have closed the fd it uses for the history * file (63 on my box). * * fcntl with F_DUPFD returns first available >= arg3 * so we iterate from the top until we find a available * fd. * * Not finding an fd after 10 tries is a failure. * * Since the _file member of the FILE structure is an * unsigned char, we must clamp our fd request to * UCHAR_MAX */ lowerlimit = ((rl.rlim_cur > UCHAR_MAX) ? UCHAR_MAX : rl.rlim_cur) - 10; for (targetfd = lowerlimit + 10; targetfd > lowerlimit; targetfd--) { if ((newfd = fcntl(fd, F_DUPFD, targetfd)) != -1) break; } if (newfd == -1) { (void) fprintf(stderr, dgettext(TEXT_DOMAIN, "apptrace: F_DUPFD: %s\n"), strerror(errno)); exit(EXIT_FAILURE); } (void) close(fd); if (fcntl(newfd, F_SETFD, FD_CLOEXEC) == -1) { (void) fprintf(stderr, dgettext(TEXT_DOMAIN, "apptrace: fcntl FD_CLOEXEC: %s\n"), strerror(errno)); exit(EXIT_FAILURE); } if ((fp = fdopen(newfd, "wF")) != NULL) { ABISTREAM = fp; } else { (void) fprintf(stderr, dgettext(TEXT_DOMAIN, "apptrace: fdopen: %s\n"), strerror(errno)); exit(EXIT_FAILURE); } } #if defined(_LP64) build_env_list1(&intlib_list, &intlib_listend, "APPTRACE_INTERCEPTORS64"); #else build_env_list1(&intlib_list, &intlib_listend, "APPTRACE_INTERCEPTORS"); #endif /* Set up lists interfaces to trace or ignore */ env_to_intlist(&trace_list, "APPTRACE_INTERFACES"); env_to_intlist(&trace_excl, "APPTRACE_INTERFACES_EXCLUDE"); env_to_intlist(&verbose_list, "APPTRACE_VERBOSE"); env_to_intlist(&verbose_excl, "APPTRACE_VERBOSE_EXCLUDE"); return (LAV_CURRENT); }