exploit the possibilities
Home Files News &[SERVICES_TAB]About Contact Add New

login_patch.txt

login_patch.txt
Posted Sep 21, 1999

Patch to util-linux-2.9o login.c (and pathnames.h) that provides a means under Linux (should be pretty portable to other OS's) to set limits for the address space limit

tags | exploit
systems | linux
SHA-256 | 956454589237b40d850436b1b95456b44151f45af8ce9252d65db79143aeea08

login_patch.txt

Change Mirror Download
diff -ur ./util-linux-2.9o/lib/pathnames.h ./util-linux-2.9o-mp/lib/pathnames.h
--- ./util-linux-2.9o/lib/pathnames.h Sun Oct 11 14:19:16 1998
+++ ./util-linux-2.9o-mp/lib/pathnames.h Wed Jul 14 22:51:13 1999
@@ -86,6 +86,7 @@

#define _PATH_SECURE "/etc/securesingle"
#define _PATH_USERTTY "/etc/usertty"
+#define _PATH_LIMITS "/etc/limits"

#define _PATH_MTAB "/etc/mtab"
#define _PATH_UMOUNT "/bin/umount"
diff -ur ./util-linux-2.9o/login-utils/login.c ./util-linux-2.9o-mp/login-utils/login.c
--- ./util-linux-2.9o/login-utils/login.c Sat Mar 20 14:20:16 1999
+++ ./util-linux-2.9o-mp/login-utils/login.c Wed Jul 14 22:49:24 1999
@@ -185,6 +185,7 @@
char *stypeof P_((char *ttyid));
void checktty P_((char *user, char *tty, struct passwd *pwd));
void sleepexit P_((int eval));
+void setup_limits P_(struct passwd *pwd);
#ifdef CRYPTOCARD
int cryptocard P_((void));
#endif
@@ -1110,6 +1111,8 @@

childArgv[childArgc++] = NULL;

+ setup_limits(pwd);
+
execvp(childArgv[0], childArgv + 1);

if (!strcmp(childArgv[0], "/bin/sh"))
@@ -1120,6 +1123,161 @@

exit(0);
}
+
+/* Most of this code ripped from lshell by Joel Katz */
+void process(char *buf)
+{
+ /* buf is of the form [Fn][Pn][Ct][Vm][Sm][Rm][Lm][Dm] where */
+ /* F specifies n max open files */
+ /* P specifies n max procs */
+ /* c specifies t seconds of cpu */
+ /* C specifies t minutes of cpu */
+ /* v specifies m kbs of total virtual memory (address space) */
+ /* V specifies m megs of total virtual memory (address space) */
+ /* s specifies m kbs of stack */
+ /* S specifies m megs of stack */
+ /* r specifies m kbs of RSS */
+ /* R specifies m megs of RSS */
+ /* l specifies m kbs of locked (non-swappable) memory */
+ /* L specifies m megs of locked (non-swappable) memory */
+ /* d specifies m kbs of Data segment */
+ /* D specifies m megs of Data segment */
+
+ struct rlimit rlim;
+ char *pp = buf;
+ int i;
+
+ while(*pp!=0)
+ {
+ i = 1;
+ switch(*pp++)
+ {
+ case 'f':
+ case 'F':
+ i = atoi(pp);
+ if(!i)
+ break;
+ rlim.rlim_cur = i;
+ rlim.rlim_max = i;
+ setrlimit(RLIMIT_NOFILE, &rlim);
+ break;
+ case 'p':
+ case 'P':
+ i = atoi(pp);
+ if(!i)
+ break;
+ rlim.rlim_cur = i;
+ rlim.rlim_max = i;
+ setrlimit(RLIMIT_NPROC, &rlim);
+ break;
+ case 'C':
+ i = 60;
+ case 'c':
+ i *= atoi(pp);
+ if(!i)
+ break;
+ rlim.rlim_cur = i;
+ rlim.rlim_max = i;
+ setrlimit(RLIMIT_CPU, &rlim);
+ break;
+ case 'V':
+ i = 1024;
+ case 'v':
+ i *= atoi(pp)*1024;
+ if(!i)
+ break;
+ rlim.rlim_cur = i;
+ rlim.rlim_max = i;
+#if defined(RLIMIT_AS) /* Linux */
+ setrlimit(RLIMIT_AS, &rlim);
+#else if defined(RLIMIT_VMEM) /* Irix */
+ setrlimit(RLIMIT_VMEM, &rlim);
+#endif
+ break;
+ case 'S':
+ i = 1024;
+ case 's':
+ i *= atoi(pp)*1024;
+ if(!i)
+ break;
+ rlim.rlim_cur = i;
+ rlim.rlim_max = i;
+ setrlimit(RLIMIT_STACK, &rlim);
+ break;
+ case 'R':
+ i = 1024;
+ case 'r':
+ i *= atoi(pp)*1024;
+ if(!i)
+ break;
+ rlim.rlim_cur = i;
+ rlim.rlim_max = i;
+ setrlimit(RLIMIT_RSS, &rlim);
+ break;
+ case 'L':
+ i = 1024;
+ case 'l':
+ i *= atoi(pp)*1024;
+ if(!i)
+ break;
+ rlim.rlim_cur = i;
+ rlim.rlim_max = i;
+ setrlimit(RLIMIT_MEMLOCK, &rlim);
+ break;
+ case 'D':
+ i = 1024;
+ case 'd':
+ i *= atoi(pp)*1024;
+ if(!i)
+ break;
+ rlim.rlim_cur = i;
+ rlim.rlim_max = i;
+ setrlimit(RLIMIT_DATA, &rlim);
+ break;
+ }
+ }
+}
+
+void setup_limits(struct passwd *pw)
+{
+ FILE *fp;
+ int i;
+ char buf[200], name[20], limits[64];
+ char *p;
+
+ if(pw->pw_uid == 0)
+ {
+ return;
+ }
+
+ if((fp = fopen(_PATH_LIMITS,"r")) == NULL)
+ {
+ return;
+ }
+
+ while(fgets(buf, 200, fp) != NULL)
+ {
+ if(buf[0] == '#')
+ continue;
+
+ p = strchr(buf, '#');
+ if(p)
+ *p = 0;
+
+ i=sscanf(buf, "%s %s", name, limits);
+
+ if(!strcmp(name, pw->pw_name))
+ {
+ if(i==2)
+ process(limits);
+ fclose(fp);
+ return;
+ }
+ }
+ fclose(fp);
+ process(limits); /* Last line is default */
+}
+

void
getloginname()
Login or Register to add favorites

File Archive:

April 2024

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Apr 1st
    10 Files
  • 2
    Apr 2nd
    26 Files
  • 3
    Apr 3rd
    40 Files
  • 4
    Apr 4th
    6 Files
  • 5
    Apr 5th
    26 Files
  • 6
    Apr 6th
    0 Files
  • 7
    Apr 7th
    0 Files
  • 8
    Apr 8th
    22 Files
  • 9
    Apr 9th
    14 Files
  • 10
    Apr 10th
    10 Files
  • 11
    Apr 11th
    13 Files
  • 12
    Apr 12th
    14 Files
  • 13
    Apr 13th
    0 Files
  • 14
    Apr 14th
    0 Files
  • 15
    Apr 15th
    30 Files
  • 16
    Apr 16th
    10 Files
  • 17
    Apr 17th
    22 Files
  • 18
    Apr 18th
    45 Files
  • 19
    Apr 19th
    0 Files
  • 20
    Apr 20th
    0 Files
  • 21
    Apr 21st
    0 Files
  • 22
    Apr 22nd
    0 Files
  • 23
    Apr 23rd
    0 Files
  • 24
    Apr 24th
    0 Files
  • 25
    Apr 25th
    0 Files
  • 26
    Apr 26th
    0 Files
  • 27
    Apr 27th
    0 Files
  • 28
    Apr 28th
    0 Files
  • 29
    Apr 29th
    0 Files
  • 30
    Apr 30th
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2022 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close