Added a pile of syslog stuff, so that admins can see what this thing is
[shells] / chrootsh.c
index 2dfa52b..5b12d0e 100644 (file)
@@ -1,36 +1,41 @@
 /* -*-c-*-
  *
- * $Id: chrootsh.c,v 1.1 1999/04/20 00:19:04 mdw Exp $
+ * $Id: chrootsh.c,v 1.3 1999/04/21 22:52:43 mdw Exp $
  *
  * Chroot gaol shell
  *
- * (c) 1999 EBI
+ * (c) 1999 Mark Wooding
  */
 
 /*----- Licensing notice --------------------------------------------------* 
  *
- * This file is part of Chroot shell.
- *
- * chrootsh is free software; you can redistribute it and/or modify
+ * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  * 
- * chrootsh is distributed in the hope that it will be useful,
+ * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  * 
  * You should have received a copy of the GNU General Public License
- * along with chrootsh; if not, write to the Free Software Foundation,
+ * along with this program; if not, write to the Free Software Foundation,
  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: chrootsh.c,v $
- * Revision 1.1  1999/04/20 00:19:04  mdw
- * Initial revision
+ * Revision 1.3  1999/04/21 22:52:43  mdw
+ * Added a pile of syslog stuff, so that admins can see what this thing is
+ * doing.
+ *
+ * Revision 1.2  1999/04/21 09:07:55  mdw
+ * Fiddle with copyright messages so that they're correct.
+ *
+ * Revision 1.1.1.1  1999/04/20 00:19:04  mdw
+ * Initial versions.
  *
  */
 
@@ -43,6 +48,7 @@
 
 #include <sys/types.h>
 #include <unistd.h>
+#include <syslog.h>
 #include <pwd.h>
 
 extern char **environ;
@@ -77,6 +83,7 @@ int main(int argc, char *argv[])
 {
   struct passwd *pw;
   uid_t me = getuid();
+  char *myname;
   char **env;
   char **av;
 
@@ -89,17 +96,22 @@ int main(int argc, char *argv[])
       if (*q == '/')
        p = q + 1;
     }
+    if (*p == '-')
+      p++;
     quis = p;
+    openlog(quis, LOG_PID | LOG_NDELAY, LOG_DAEMON);
   }
 
   /* --- Check the user is meant to be chrooted --- */
 
   pw = getpwuid(me);
   if (!pw) {
+    syslog(LOG_ERR, "executed by non-existant user (uid = %i)", (int)me);
     fprintf(stderr, "%s: you don't exist.  Go away.\n", quis);
     exit(EXIT_FAILURE);
   }
   if (strcmp(pw->pw_shell, CHROOTSH_PATH) != 0) {
+    syslog(LOG_ERR, "executed by non-chrooted user `%s'", pw->pw_name);
     fprintf(stderr, "%s: you aren't a chrooted user\n", quis);
     exit(EXIT_FAILURE);
   }
@@ -114,6 +126,7 @@ int main(int argc, char *argv[])
       *q = 0;
     
     if (chdir(p) || chroot(p)) {
+      syslog(LOG_ERR, "error entering chroot gaol: %m");
       fprintf(stderr, "%s: couldn't call chroot: %s", quis, strerror(errno));
       exit(EXIT_FAILURE);
     }
@@ -124,10 +137,11 @@ int main(int argc, char *argv[])
   /* --- Read the new password block --- */
 
   {
-    char *p = xstrdup(pw->pw_name);
-    pw = getpwnam(p);
-    free(p);
+    myname = xstrdup(pw->pw_name);
+    pw = getpwnam(myname);
     if (!pw) {
+      syslog(LOG_ERR,
+            "configuration error: user `%s' not defined in gaol", myname);
       fprintf(stderr, "%s: you don't exist in the gaol\n", quis);
       exit(EXIT_FAILURE);
     }
@@ -188,6 +202,8 @@ int main(int argc, char *argv[])
 
   /* --- Run the real shell --- */
 
+  syslog(LOG_INFO, "chroot user `%s' logged in ok", myname);
+  closelog();
   execve(pw->pw_shell, av, env);
   fprintf(stderr, "%s: couldn't exec `%s': %s",
          quis, pw->pw_shell, strerror(errno));