]> andersk Git - openssh.git/blobdiff - session.c
- stevesk@cvs.openbsd.org 2001/06/25 20:26:37
[openssh.git] / session.c
index fbdc419eb5d73d4d6e67487e8d275c8ee3c58cc1..7d0e0723ce285be3026e1b742bf427131da0bb52 100644 (file)
--- a/session.c
+++ b/session.c
@@ -9,7 +9,7 @@
  * called by a name other than "ssh" or "Secure Shell".
  *
  * SSH2 support by Markus Friedl.
- * Copyright (c) 2000 Markus Friedl.  All rights reserved.
+ * Copyright (c) 2000, 2001 Markus Friedl.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -33,7 +33,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: session.c,v 1.92 2001/06/19 15:40:45 markus Exp $");
+RCSID("$OpenBSD: session.c,v 1.95 2001/06/25 08:25:39 markus Exp $");
 
 #include "ssh.h"
 #include "ssh1.h"
@@ -120,25 +120,22 @@ struct Session {
 /* func */
 
 Session *session_new(void);
-void   session_set_fds(Session *s, int fdin, int fdout, int fderr);
-void   session_pty_cleanup(void *session);
-int    session_pty_req(Session *s);
-void   session_proctitle(Session *s);
-int    session_setup_x11fwd(Session *s);
-void   session_close(Session *s);
-void   do_exec_pty(Session *s, const char *command);
-void   do_exec_no_pty(Session *s, const char *command);
-void   do_exec(Session *s, const char *command);
-void   do_login(Session *s, const char *command);
-#ifdef LOGIN_NEEDS_UTMPX
-void   do_pre_login(Session *s);
-#endif
-void   do_child(Session *s, const char *command);
+void  session_set_fds(Session *, int, int, int);
+static void   session_pty_cleanup(void *);
+void  session_proctitle(Session *);
+int   session_setup_x11fwd(Session *);
+void  do_exec_pty(Session *, const char *);
+void  do_exec_no_pty(Session *, const char *);
+void  do_exec(Session *, const char *);
+void  do_login(Session *, const char *);
+void  do_child(Session *, const char *);
 void   do_motd(void);
-int    check_quietlogin(Session *s, const char *command);
 
-void   do_authenticated1(Authctxt *authctxt);
-void   do_authenticated2(Authctxt *authctxt);
+static void do_authenticated1(Authctxt *);
+static void do_authenticated2(Authctxt *);
+static void session_close(Session *);
+static int session_pty_req(Session *);
 
 /* import */
 extern ServerOptions options;
@@ -209,7 +206,7 @@ do_authenticated(Authctxt *authctxt)
  * terminals are allocated, X11, TCP/IP, and authentication agent forwardings
  * are requested, etc.
  */
-void
+static void
 do_authenticated1(Authctxt *authctxt)
 {
        Session *s;
@@ -367,6 +364,7 @@ do_exec_no_pty(Session *s, const char *command)
        session_proctitle(s);
 
 #if defined(USE_PAM)
+       do_pam_session(s->pw->pw_name, NULL);
        do_pam_setcred(1);
 #endif /* USE_PAM */
 
@@ -599,7 +597,6 @@ do_exec(Session *s, const char *command)
        if (forced_command) {
                original_command = command;
                command = forced_command;
-               forced_command = NULL;
                debug("Forced command '%.900s'", command);
        }
 
@@ -611,6 +608,29 @@ do_exec(Session *s, const char *command)
        original_command = NULL;
 }
 
+/*
+ * Check for quiet login, either .hushlogin or command given.
+ */
+static int
+check_quietlogin(Session *s, const char *command)
+{
+       char buf[256];
+       struct passwd * pw = s->pw;
+       struct stat st;
+
+       /* Return 1 if .hushlogin exists or a command given. */
+       if (command != NULL)
+               return 1;
+       snprintf(buf, sizeof(buf), "%.200s/.hushlogin", pw->pw_dir);
+#ifdef HAVE_LOGIN_CAP
+       if (login_getcapbool(lc, "hushlogin", 0) || stat(buf, &st) >= 0)
+               return 1;
+#else
+       if (stat(buf, &st) >= 0)
+               return 1;
+#endif
+       return 0;
+}
 
 /* administrative, login(1)-like work */
 void
@@ -710,36 +730,11 @@ do_motd(void)
        }
 }
 
-
-/*
- * Check for quiet login, either .hushlogin or command given.
- */
-int
-check_quietlogin(Session *s, const char *command)
-{
-       char buf[256];
-       struct passwd * pw = s->pw;
-       struct stat st;
-
-       /* Return 1 if .hushlogin exists or a command given. */
-       if (command != NULL)
-               return 1;
-       snprintf(buf, sizeof(buf), "%.200s/.hushlogin", pw->pw_dir);
-#ifdef HAVE_LOGIN_CAP
-       if (login_getcapbool(lc, "hushlogin", 0) || stat(buf, &st) >= 0)
-               return 1;
-#else
-       if (stat(buf, &st) >= 0)
-               return 1;
-#endif
-       return 0;
-}
-
 /*
  * Sets the value of the given variable in the environment.  If the variable
  * already exists, its value is overriden.
  */
-void
+static void
 child_set_env(char ***envp, u_int *envsizep, const char *name,
              const char *value)
 {
@@ -780,7 +775,7 @@ child_set_env(char ***envp, u_int *envsizep, const char *name,
  * Otherwise, it must consist of empty lines, comments (line starts with '#')
  * and assignments of the form name=value.  No other forms are allowed.
  */
-void
+static void
 read_environment_file(char ***env, u_int *envsize,
                      const char *filename)
 {
@@ -819,7 +814,7 @@ read_environment_file(char ***env, u_int *envsize,
 /*
  * Sets any environment variables which have been specified by PAM
  */
-void do_pam_environment(char ***env, int *envsize)
+void do_pam_environment(char ***env, u_int *envsize)
 {
        char *equals, var_name[512], var_val[512];
        char **pam_env;
@@ -848,7 +843,7 @@ void do_pam_environment(char ***env, int *envsize)
 #endif /* USE_PAM */
 
 #ifdef HAVE_CYGWIN
-void copy_environment(char ***env, int *envsize)
+void copy_environment(char ***env, u_int *envsize)
 {
        char *equals, var_name[512], var_val[512];
        int i;
@@ -1489,7 +1484,7 @@ session_new(void)
        return NULL;
 }
 
-void
+static void
 session_dump(void)
 {
        int i;
@@ -1521,7 +1516,7 @@ session_open(int chanid)
        return 1;
 }
 
-Session *
+static Session *
 session_by_channel(int id)
 {
        int i;
@@ -1537,7 +1532,7 @@ session_by_channel(int id)
        return NULL;
 }
 
-Session *
+static Session *
 session_by_pid(pid_t pid)
 {
        int i;
@@ -1552,7 +1547,7 @@ session_by_pid(pid_t pid)
        return NULL;
 }
 
-int
+static int
 session_window_change_req(Session *s)
 {
        s->col = packet_get_int();
@@ -1564,7 +1559,7 @@ session_window_change_req(Session *s)
        return 1;
 }
 
-int
+static int
 session_pty_req(Session *s)
 {
        u_int len;
@@ -1629,7 +1624,7 @@ session_pty_req(Session *s)
        return 1;
 }
 
-int
+static int
 session_subsystem_req(Session *s)
 {
        u_int len;
@@ -1656,7 +1651,7 @@ session_subsystem_req(Session *s)
        return success;
 }
 
-int
+static int
 session_x11_req(Session *s)
 {
        int success;
@@ -1677,7 +1672,7 @@ session_x11_req(Session *s)
        return success;
 }
 
-int
+static int
 session_shell_req(Session *s)
 {
        packet_done();
@@ -1685,7 +1680,7 @@ session_shell_req(Session *s)
        return 1;
 }
 
-int
+static int
 session_exec_req(Session *s)
 {
        u_int len;
@@ -1696,7 +1691,7 @@ session_exec_req(Session *s)
        return 1;
 }
 
-int
+static int
 session_auth_agent_req(Session *s)
 {
        static int called = 0;
@@ -1789,7 +1784,7 @@ session_set_fds(Session *s, int fdin, int fdout, int fderr)
  * Function to perform pty cleanup. Also called if we get aborted abnormally
  * (e.g., due to a dropped connection).
  */
-void
+static void
 session_pty_cleanup(void *session)
 {
        Session *s = session;
@@ -1819,7 +1814,7 @@ session_pty_cleanup(void *session)
                error("close(s->ptymaster): %s", strerror(errno));
 }
 
-void
+static void
 session_exit_message(Session *s, int status)
 {
        Channel *c;
@@ -1868,7 +1863,7 @@ session_exit_message(Session *s, int status)
        s->chanid = -1;
 }
 
-void
+static void
 session_close(Session *s)
 {
        debug("session_close: session %d pid %d", s->self, s->pid);
@@ -1929,7 +1924,7 @@ session_close_by_channel(int id, void *arg)
        }
 }
 
-char *
+static char *
 session_tty_list(void)
 {
        static char buf[1024];
@@ -1992,7 +1987,7 @@ session_setup_x11fwd(Session *s)
        return 1;
 }
 
-void
+static void
 do_authenticated2(Authctxt *authctxt)
 {
        server_loop2();
This page took 0.044491 seconds and 4 git commands to generate.