/* ARGSUSED */ void startslave(char *host, int autologin, char *autoname) { int i; #ifdef AUTHENTICATION if (!autoname || !autoname[0]) autologin = 0; if (autologin < auth_level) { fatal(net, "Authorization failed"); exit(1); } #endif if ((i = fork()) < 0) fatalperror(net, "fork"); if (i) { } else { getptyslave(); start_login(host, autologin, autoname); /*NOTREACHED*/ } }
/* ARGSUSED */ void startslave(const char *host, int autologin, char *autoname) { int i; #if defined(AUTHENTICATE) if (!autoname || !autoname[0]) autologin = 0; if (autologin < auth_level) { fatal(net, "Authorization failed"); exit(1); } #endif i = fork(); if (i < 0) fatalperror(net, "fork"); if (i) { /* parent */ signal(SIGHUP,SIG_IGN); close(ptyslavefd); } else { /* child */ signal(SIGHUP,SIG_IGN); getptyslave(); start_login(host, autologin, autoname); /*NOTREACHED*/ } }
/* ARGSUSED */ void startslave(const char *host, const char *utmp_host, int autologin, char *autoname) { int i; #ifdef AUTHENTICATION if (!autoname || !autoname[0]) autologin = 0; if (autologin < auth_level) { fatal(net, "Authorization failed"); exit(1); } #endif { char *tbuf = "\r\n*** Connection not encrypted! " "Communication may be eavesdropped. ***\r\n"; #ifdef ENCRYPTION if (!no_warn && (encrypt_output == 0 || decrypt_input == 0)) #endif writenet(tbuf, strlen(tbuf)); } # ifdef PARENT_DOES_UTMP utmp_sig_init(); # endif /* PARENT_DOES_UTMP */ if ((i = fork()) < 0) fatalperror(net, "fork"); if (i) { # ifdef PARENT_DOES_UTMP /* * Cray parent will create utmp entry for child and send * signal to child to tell when done. Child waits for signal * before doing anything important. */ int pid = i; void sigjob (int); setpgrp(); utmp_sig_reset(); /* reset handler to default */ /* * Create utmp entry for child */ wtmp.ut_time = time(NULL); wtmp.ut_type = LOGIN_PROCESS; wtmp.ut_pid = pid; strncpy(wtmp.ut_user, "LOGIN", sizeof(wtmp.ut_user)); strncpy(wtmp.ut_host, utmp_host, sizeof(wtmp.ut_host)); strncpy(wtmp.ut_line, clean_ttyname(line), sizeof(wtmp.ut_line)); #ifdef HAVE_STRUCT_UTMP_UT_ID strncpy(wtmp.ut_id, wtmp.ut_line + 3, sizeof(wtmp.ut_id)); #endif pututline(&wtmp); endutent(); if ((i = open(wtmpf, O_WRONLY|O_APPEND)) >= 0) { write(i, &wtmp, sizeof(struct utmp)); close(i); } #ifdef _CRAY signal(WJSIGNAL, sigjob); #endif utmp_sig_notify(pid); # endif /* PARENT_DOES_UTMP */ } else { getptyslave(); #if defined(DCE) /* if we authenticated via K5, try and join the PAG */ kerberos5_dfspag(); #endif start_login(host, autologin, autoname); /*NOTREACHED*/ } }