- include strings.h
Thanks to Rich Felker for pointing this out.
This commit is contained in:
parent
a85a63f6ee
commit
a2a647dfc1
5 changed files with 12 additions and 7 deletions
|
@ -12,6 +12,7 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <strings.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
|
@ -53,6 +53,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <strings.h>
|
||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
|
|
@ -18,12 +18,12 @@
|
||||||
This password types should not be permitted:
|
This password types should not be permitted:
|
||||||
a) pure numbers: birthdates, social security number, license plate, phone numbers;
|
a) pure numbers: birthdates, social security number, license plate, phone numbers;
|
||||||
b) words and all letters only passwords (uppercase, lowercase or mixed)
|
b) words and all letters only passwords (uppercase, lowercase or mixed)
|
||||||
as palindromes, consecutive or repetitive letters
|
as palindromes, consecutive or repetitive letters
|
||||||
or adjacent letters on your keyboard;
|
or adjacent letters on your keyboard;
|
||||||
c) username, real name, company name or (e-mail?) address
|
c) username, real name, company name or (e-mail?) address
|
||||||
in any form (as-is, reversed, capitalized, doubled, etc.).
|
in any form (as-is, reversed, capitalized, doubled, etc.).
|
||||||
(we can check only against username, gecos and hostname)
|
(we can check only against username, gecos and hostname)
|
||||||
d) common and obvious letter-number replacements
|
d) common and obvious letter-number replacements
|
||||||
(e.g. replace the letter O with number 0)
|
(e.g. replace the letter O with number 0)
|
||||||
such as "M1cr0$0ft" or "P@ssw0rd" (CAVEAT: we cannot check for them
|
such as "M1cr0$0ft" or "P@ssw0rd" (CAVEAT: we cannot check for them
|
||||||
without the use of a dictionary).
|
without the use of a dictionary).
|
||||||
|
@ -42,12 +42,13 @@
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <strings.h>
|
||||||
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
|
|
||||||
|
|
||||||
/* passwords should consist of 6 (to 8 characters) */
|
/* passwords should consist of 6 (to 8 characters) */
|
||||||
#define MINLEN 6
|
#define MINLEN 6
|
||||||
|
|
||||||
|
|
||||||
static int string_checker_helper(const char *p1, const char *p2) __attribute__ ((__pure__));
|
static int string_checker_helper(const char *p1, const char *p2) __attribute__ ((__pure__));
|
||||||
|
@ -93,7 +94,7 @@ static int string_checker(const char *p1, const char *p2)
|
||||||
#define NUMBERS 4
|
#define NUMBERS 4
|
||||||
#define SPECIAL 8
|
#define SPECIAL 8
|
||||||
|
|
||||||
static const char *obscure_msg(const char *old_p, const char *new_p, const struct passwd *pw)
|
static const char *obscure_msg(const char *old_p, const char *new_p, const struct passwd *pw)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int c;
|
int c;
|
||||||
|
@ -107,7 +108,7 @@ static const char *obscure_msg(const char *old_p, const char *new_p, const struc
|
||||||
/* size */
|
/* size */
|
||||||
if (!new_p || (length = strlen(new_p)) < MINLEN)
|
if (!new_p || (length = strlen(new_p)) < MINLEN)
|
||||||
return("too short");
|
return("too short");
|
||||||
|
|
||||||
/* no username as-is, as sub-string, reversed, capitalized, doubled */
|
/* no username as-is, as sub-string, reversed, capitalized, doubled */
|
||||||
if (string_checker(new_p, pw->pw_name)) {
|
if (string_checker(new_p, pw->pw_name)) {
|
||||||
return "similar to username";
|
return "similar to username";
|
||||||
|
@ -152,11 +153,11 @@ static const char *obscure_msg(const char *old_p, const char *new_p, const struc
|
||||||
return "too many similar characters";
|
return "too many similar characters";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(i=0;i<4;i++)
|
for (i=0; i<4; i++)
|
||||||
if (mixed & (1<<i)) size -= 2;
|
if (mixed & (1<<i)) size -= 2;
|
||||||
if (length < size)
|
if (length < size)
|
||||||
return "too weak";
|
return "too weak";
|
||||||
|
|
||||||
if (old_p && old_p[0] != '\0') {
|
if (old_p && old_p[0] != '\0') {
|
||||||
/* check vs. old password */
|
/* check vs. old password */
|
||||||
if (string_checker(new_p, old_p)) {
|
if (string_checker(new_p, old_p)) {
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <strings.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <strings.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue