Fix uid bug in chroot wrapper.
authorMichael Poole <mdpoole@troilus.org>
Sat, 15 May 2004 14:50:09 +0000 (14:50 +0000)
committerMichael Poole <mdpoole@troilus.org>
Sat, 15 May 2004 14:50:09 +0000 (14:50 +0000)
Fix calculation of "generation" in version.c.SH.

git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/trunk@1050 c9e4aea6-c8fd-4c43-8297-357d70d61c8c

ChangeLog
ircd/version.c.SH
tools/wrapper.c

index 4a7b9328169423ec73b5cb683c531c9d169c74ae..59f1ad40b9de90b0bff7d78cccc452ad95eb5b77 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2004-05-15  Kevin L Mitchell  <klmitch@mit.edu>
+
+       [Original ChangeLog date: 2003-11-22 -MDP]
+
+       * tools/wrapper.c: commit uid on chroot fix from ubra
+
+       * ircd/version.c.SH: fix generation generation
+
 2004-05-15  Isomer <isomer@undernet.org>
 
        [Original ChangeLog date: 2003-11-23 -MDP]
index c4f180436fe6a165fb78ac3b93996719cd89c40a..2b65dc829da151c752cbd836272be42a39ab1847 100644 (file)
@@ -4,7 +4,7 @@ srcdir=$1
 
 if test -r version.c
 then
-   generation=`sed -n 's/^char \*generation = \"\(.*\)\";/\1/p' < version.c`
+   generation=`sed -n 's/^const char \*generation = \"\(.*\)\";/\1/p' < version.c`
    if test ! "$generation" ; then generation=0; fi
 else
    generation=0
index cd26ae18c8120041b88d05ed343073da80b55e0e..448598e22a1e2b64d2dba61632bc50e64fccf736 100644 (file)
@@ -1,5 +1,4 @@
 /*
-** IRC - Internet Relay Chat, tools/wrapper.c
 ** Copyright (C) 2000 by Kevin L. Mitchell <klmitch@mit.edu>
 **
 ** This program is free software; you can redistribute it and/or modify
@@ -48,6 +47,9 @@
 #endif
 #endif
 
+/*fix for change uid/gid with chroot #ubra 08/02/03*/
+int uid, gid;
+
 /*
  * Set the hard and soft limits for maximum file descriptors.
  */
@@ -79,14 +81,16 @@ change_root(char *root)
 /*
  * Change the user and group ids--including supplementary groups!--as
  * appropriate.
+ *
+ * fix for change uid/gid with chroot #ubra 08/02/03
+ * old change_user() got splited into get_user() and set_user()
  */
 int
-change_user(char *user, char *group)
+get_user(char *user, char *group)
 {
   struct passwd *pwd;
   struct group *grp;
   char *tmp;
-  int uid, gid;
 
   /* Track down a struct passwd describing the desired user */
   uid = strtol(user, &tmp, 10); /* was the user given as a number? */
@@ -112,6 +116,11 @@ change_user(char *user, char *group)
 
   if (initgroups(pwd->pw_name, gid)) /* initialize supplementary groups */
     return -1;
+  return 0; /* success! */
+}
+
+int
+set_user(void) {
   if (setgid(gid)) /* change our current group */
     return -1;
   if (setuid(uid)) /* change our current user */
@@ -183,6 +192,13 @@ main(int argc, char **argv)
       return 1;
     }
 
+  if(user) /* get the selected user account uid/gid*/
+   if (get_user(user, group)) {
+     perror(prog);
+     return 1;
+   }
+
+
   if (root) /* change root directories */
     if (change_root(root)) {
       perror(prog);
@@ -190,7 +206,7 @@ main(int argc, char **argv)
     }
 
   if (user) /* change to selected user account */
-    if (change_user(user, group)) {
+    if (set_user()) {
       perror(prog);
       return 1;
     }