commit 8f4c0f2a8ef86942c4c147f82c5eeb2bd4107f9a
parent 0e6d7ca2864634a9aecf7c03e40e1fcd046f826b
Author: sin <sin@2f30.org>
Date: Tue, 22 Apr 2014 16:35:24 +0100
Add random replies for failed password attempts in su(1)
Diffstat:
M | su.c | | | 28 | ++++++++++++++++++++++++++-- |
1 file changed, 26 insertions(+), 2 deletions(-)
diff --git a/su.c b/su.c
@@ -8,11 +8,13 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
+#include <time.h>
#include "config.h"
#include "util.h"
extern char **environ;
+static const char *randreply(void);
static char *msetenv(const char *, const char *);
static void dologin(struct passwd *);
@@ -53,6 +55,8 @@ main(int argc, char *argv[])
else
usage();
+ srand(time(NULL));
+
errno = 0;
spw = getspnam(usr);
if (errno)
@@ -63,7 +67,7 @@ main(int argc, char *argv[])
switch (spw->sp_pwdp[0]) {
case '!':
case '*':
- eprintf("Denied\n");
+ eprintf("Denied.\n");
case '$':
break;
default:
@@ -83,7 +87,7 @@ main(int argc, char *argv[])
eprintf("crypt:");
if (strcmp(cryptpass, spw->sp_pwdp) != 0)
- eprintf("Denied\n");
+ eprintf(randreply());
}
errno = 0;
@@ -122,6 +126,26 @@ main(int argc, char *argv[])
return (errno == ENOENT) ? 127 : 126;
}
+static const char *
+randreply(void)
+{
+ static const char *replies[] = {
+ "Time flies like an arrow, fruit flies like a banana.\n",
+ "Denied.\n",
+ "You type like a dairy farmer.\n",
+ "CChheecckk yyoouurr dduupplleexx sswwiittcchh..\n",
+ "I met a girl with 12 nipples, it sounds weird dozen tit?\n",
+ "Here I am, brain the size of a planet and they ask me to keep hashing rubbish.\n",
+ "Clones are people two.\n",
+ "Your mom is an interesting su response.\n",
+ "no.\n",
+ "Your mom forgot to null-terminate???B?33??Abort (core dumped)\n",
+ "A fool-proof method for sculpting an elephant: first, get a huge block of marble; then you chip away everything that doesn't look like an elephant.\n",
+ "Bloating .data for fun and profit.\n",
+ };
+ return replies[rand() % LEN(replies)];
+}
+
static char *
msetenv(const char *name, const char *value)
{