SHOW:
|
|
- or go back to the newest paste.
1 | --- modules/pam_motd/pam_motd.c 2011-06-21 11:04:56.000000000 +0200 | |
2 | +++ modules/pam_motd/pam_motd.c-patched 2012-06-02 22:09:34.000000000 +0200 | |
3 | @@ -82,16 +82,43 @@ | |
4 | ||
5 | while ((fd = open(motd_path, O_RDONLY, 0)) >= 0) { | |
6 | struct stat st; | |
7 | + if(fstat(fd, &st) == -1) break; | |
8 | ||
9 | - /* fill in message buffer with contents of motd */ | |
10 | - if ((fstat(fd, &st) < 0) || !st.st_size || st.st_size > 0x10000) | |
11 | - break; | |
12 | + /* Fira Hack patch to make him read FIFOs aswell | |
13 | + * This is not safe and could use a bunch of additional checks */ | |
14 | + if (S_ISFIFO(st.st_mode)) { | |
15 | + | |
16 | + int fifo_imotd = 0; | |
17 | + int fifo_motdcap = 100; | |
18 | + int fifo_readres = 0; | |
19 | ||
20 | - if (!(mtmp = malloc(st.st_size+1))) | |
21 | - break; | |
22 | - | + /*mtmp = malloc(100); |
22 | + | |
23 | - | + strcpy(mtmp, "This is definetely a pipe!"); |
23 | + | |
24 | - | + st.st_size = 20;*/ |
24 | + | |
25 | - if (pam_modutil_read(fd, mtmp, st.st_size) != st.st_size) | |
26 | - break; | |
27 | + /* While there is data left in the pipe, read | |
28 | + * by increments of 100 characters - realloc'ing when neccessary */ | |
29 | + do { | |
30 | + mtmp = realloc(mtmp, (fifo_motdcap += 100)); | |
31 | + fifo_readres = read(fd, &mtmp[fifo_imotd], 100); | |
32 | + fifo_imotd += fifo_readres; | |
33 | + } while (fifo_readres); | |
34 | + | |
35 | + st.st_size = fifo_imotd + 1; | |
36 | + | |
37 | + } else { | |
38 | + /* fill in message buffer with contents of motd */ | |
39 | + if (!st.st_size || st.st_size > 0x10000) | |
40 | + break; | |
41 | + | |
42 | + if (!(mtmp = malloc(st.st_size+1))) | |
43 | + break; | |
44 | + | |
45 | + if (pam_modutil_read(fd, mtmp, st.st_size) != st.st_size) | |
46 | + break; | |
47 | + } | |
48 | ||
49 | if (mtmp[st.st_size-1] == '\n') | |
50 | mtmp[st.st_size-1] = '\0'; |