changed debian/source/format to native
This commit is contained in:
parent
9519f8323d
commit
6987af54db
|
@ -1,93 +0,0 @@
|
|||
Description: CVE-2016-6318: Stack-based buffer overflow when parsing large GECOS field
|
||||
It is not safe to pass words longer than STRINGSIZE further to cracklib
|
||||
so the longbuffer cannot be longer than STRINGSIZE.
|
||||
Origin: vendor, https://bugzilla.redhat.com/attachment.cgi?id=1188599
|
||||
Bug-Debian: https://bugs.debian.org/834502
|
||||
Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1364944
|
||||
Forwarded: not-needed
|
||||
Author: Salvatore Bonaccorso <carnil@debian.org>
|
||||
Last-Update: 2016-08-16
|
||||
|
||||
--- a/lib/fascist.c
|
||||
+++ b/lib/fascist.c
|
||||
@@ -502,7 +502,7 @@ FascistGecosUser(char *password, const c
|
||||
char gbuffer[STRINGSIZE];
|
||||
char tbuffer[STRINGSIZE];
|
||||
char *uwords[STRINGSIZE];
|
||||
- char longbuffer[STRINGSIZE * 2];
|
||||
+ char longbuffer[STRINGSIZE];
|
||||
|
||||
if (gecos == NULL)
|
||||
gecos = "";
|
||||
@@ -583,38 +583,47 @@ FascistGecosUser(char *password, const c
|
||||
{
|
||||
for (i = 0; i < j; i++)
|
||||
{
|
||||
- strcpy(longbuffer, uwords[i]);
|
||||
- strcat(longbuffer, uwords[j]);
|
||||
-
|
||||
- if (GTry(longbuffer, password))
|
||||
+ if (strlen(uwords[i]) + strlen(uwords[j]) < STRINGSIZE)
|
||||
{
|
||||
- return _("it is derived from your password entry");
|
||||
- }
|
||||
-
|
||||
- strcpy(longbuffer, uwords[j]);
|
||||
- strcat(longbuffer, uwords[i]);
|
||||
+ strcpy(longbuffer, uwords[i]);
|
||||
+ strcat(longbuffer, uwords[j]);
|
||||
|
||||
- if (GTry(longbuffer, password))
|
||||
- {
|
||||
- return _("it's derived from your password entry");
|
||||
+ if (GTry(longbuffer, password))
|
||||
+ {
|
||||
+ return _("it is derived from your password entry");
|
||||
+ }
|
||||
+
|
||||
+ strcpy(longbuffer, uwords[j]);
|
||||
+ strcat(longbuffer, uwords[i]);
|
||||
+
|
||||
+ if (GTry(longbuffer, password))
|
||||
+ {
|
||||
+ return _("it's derived from your password entry");
|
||||
+ }
|
||||
}
|
||||
|
||||
- longbuffer[0] = uwords[i][0];
|
||||
- longbuffer[1] = '\0';
|
||||
- strcat(longbuffer, uwords[j]);
|
||||
-
|
||||
- if (GTry(longbuffer, password))
|
||||
+ if (strlen(uwords[j]) < STRINGSIZE - 1)
|
||||
{
|
||||
- return _("it is derivable from your password entry");
|
||||
+ longbuffer[0] = uwords[i][0];
|
||||
+ longbuffer[1] = '\0';
|
||||
+ strcat(longbuffer, uwords[j]);
|
||||
+
|
||||
+ if (GTry(longbuffer, password))
|
||||
+ {
|
||||
+ return _("it is derivable from your password entry");
|
||||
+ }
|
||||
}
|
||||
|
||||
- longbuffer[0] = uwords[j][0];
|
||||
- longbuffer[1] = '\0';
|
||||
- strcat(longbuffer, uwords[i]);
|
||||
-
|
||||
- if (GTry(longbuffer, password))
|
||||
+ if (strlen(uwords[i]) < STRINGSIZE - 1)
|
||||
{
|
||||
- return _("it's derivable from your password entry");
|
||||
+ longbuffer[0] = uwords[j][0];
|
||||
+ longbuffer[1] = '\0';
|
||||
+ strcat(longbuffer, uwords[i]);
|
||||
+
|
||||
+ if (GTry(longbuffer, password))
|
||||
+ {
|
||||
+ return _("it's derivable from your password entry");
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,83 +0,0 @@
|
|||
Author: Jan Dittberner <jandd@debian.org>
|
||||
Subject: improve Python test to cover low level FascistCheck
|
||||
Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=737040
|
||||
--- a/python/test_cracklib.py
|
||||
+++ b/python/test_cracklib.py
|
||||
@@ -15,6 +15,13 @@
|
||||
|
||||
|
||||
class TestModuleFunctions(unittest.TestCase):
|
||||
+ def test_FascistCheck(self):
|
||||
+ try:
|
||||
+ cracklib.FascistCheck('test', dictpath=dictpath)
|
||||
+ self.fail('expected ValueError')
|
||||
+ except ValueError:
|
||||
+ pass
|
||||
+
|
||||
def test_VeryFascistCheck(self):
|
||||
try:
|
||||
cracklib.VeryFascistCheck('test', dictpath=dictpath)
|
||||
@@ -68,7 +75,7 @@
|
||||
|
||||
def test_simple_lower(self):
|
||||
for passwd in ['t' * i for i in range(
|
||||
- cracklib.MIN_LENGTH - cracklib.LOW_CREDIT)]:
|
||||
+ cracklib.MIN_LENGTH - cracklib.LOW_CREDIT)]:
|
||||
self.assertEquals(
|
||||
1, cracklib.simple(passwd),
|
||||
'password {0} should be detected as too simple'.format(
|
||||
@@ -78,7 +85,7 @@
|
||||
|
||||
def test_simple_upper(self):
|
||||
for passwd in ['T' * i for i in range(
|
||||
- cracklib.MIN_LENGTH - cracklib.UP_CREDIT)]:
|
||||
+ cracklib.MIN_LENGTH - cracklib.UP_CREDIT)]:
|
||||
self.assertEquals(
|
||||
1, cracklib.simple(passwd),
|
||||
'password {0} should be detected as too simple'.format(
|
||||
@@ -88,7 +95,7 @@
|
||||
|
||||
def test_simple_digit(self):
|
||||
for passwd in ['1' * i for i in range(
|
||||
- cracklib.MIN_LENGTH - cracklib.DIG_CREDIT)]:
|
||||
+ cracklib.MIN_LENGTH - cracklib.DIG_CREDIT)]:
|
||||
self.assertEquals(
|
||||
1, cracklib.simple(passwd),
|
||||
'password {0} should be detected as too simple'.format(
|
||||
@@ -98,7 +105,7 @@
|
||||
|
||||
def test_simple_other(self):
|
||||
for passwd in ['#' * i for i in range(
|
||||
- cracklib.MIN_LENGTH - cracklib.OTH_CREDIT)]:
|
||||
+ cracklib.MIN_LENGTH - cracklib.OTH_CREDIT)]:
|
||||
self.assertEquals(
|
||||
1, cracklib.simple(passwd),
|
||||
'password {0} should be detected as too simple'.format(
|
||||
@@ -109,14 +116,16 @@
|
||||
def test_simple_combinations(self):
|
||||
testset = '#a' * (cracklib.MIN_LENGTH // 2)
|
||||
for passwd in [testset[:i] for i in range(
|
||||
- cracklib.MIN_LENGTH - cracklib.LOW_CREDIT - cracklib.OTH_CREDIT)]:
|
||||
+ cracklib.MIN_LENGTH -
|
||||
+ cracklib.LOW_CREDIT -
|
||||
+ cracklib.OTH_CREDIT)]:
|
||||
self.assertEquals(
|
||||
1, cracklib.simple(passwd),
|
||||
'password {0} should be detected as too simple'.format(
|
||||
passwd))
|
||||
self.assertEquals(0, cracklib.simple(
|
||||
testset[:(cracklib.MIN_LENGTH - cracklib.LOW_CREDIT -
|
||||
- cracklib.OTH_CREDIT)]))
|
||||
+ cracklib.OTH_CREDIT)]))
|
||||
|
||||
|
||||
tests.append(TestModuleFunctions)
|
||||
@@ -127,7 +136,7 @@
|
||||
print(('cracklib is installed in: ' + os.path.dirname(__file__)))
|
||||
print(('cracklib version: ' + __version__))
|
||||
print((sys.version))
|
||||
- dictpath=use_dictpath
|
||||
+ dictpath = use_dictpath
|
||||
|
||||
suite = unittest.TestSuite()
|
||||
for cls in tests:
|
|
@ -1,13 +0,0 @@
|
|||
Subject: install Debian specific Python modules
|
||||
Author: Jan Dittberner <jandd@debian.org>
|
||||
--- a/python/setup.py.in
|
||||
+++ b/python/setup.py.in
|
||||
@@ -42,7 +42,7 @@
|
||||
author_email="jan@dittberner.info",
|
||||
url="http://cracklib.sourceforge.net/",
|
||||
license="GPLv2+",
|
||||
- py_modules=['cracklib', 'test_cracklib'],
|
||||
+ py_modules=['cracklib', 'test_cracklib', 'crack'],
|
||||
package_dir={'': '@srcdir@'},
|
||||
ext_modules=extensions,
|
||||
zip_safe=False,
|
|
@ -1,202 +0,0 @@
|
|||
Subject: add a safer check variant
|
||||
Author: Markus Wanner <markus@bluegap.ch>
|
||||
Bug-Debian: http://bugs.debian.org/682735
|
||||
Bug-Debian: http://bugs.debian.org/737040
|
||||
--- a/lib/fascist.c
|
||||
+++ b/lib/fascist.c
|
||||
@@ -882,6 +882,60 @@
|
||||
return FascistCheckUser(password, path, NULL, NULL);
|
||||
}
|
||||
|
||||
+/* This Debian specific method is a work-around for Debian #682735. Please
|
||||
+ do not rely on it being available in future verisons of cracklib2. */
|
||||
+int
|
||||
+__DEBIAN_SPECIFIC__SafeFascistCheck(password, path, errstr, errstr_len)
|
||||
+ const char *password;
|
||||
+ const char *path;
|
||||
+ char *errstr;
|
||||
+ size_t errstr_len;
|
||||
+{
|
||||
+ PWDICT *pwp;
|
||||
+ char pwtrunced[STRINGSIZE];
|
||||
+ char *error;
|
||||
+
|
||||
+ /* If passed null for the path, use a compiled-in default */
|
||||
+ if ( ! path )
|
||||
+ {
|
||||
+ path = DEFAULT_CRACKLIB_DICT;
|
||||
+ }
|
||||
+
|
||||
+ /* security problem: assume we may have been given a really long
|
||||
+ password (buffer attack) and so truncate it to a workable size;
|
||||
+ try to define workable size as something from which we cannot
|
||||
+ extend a buffer beyond its limits in the rest of the code */
|
||||
+
|
||||
+ strncpy(pwtrunced, password, TRUNCSTRINGSIZE);
|
||||
+ pwtrunced[TRUNCSTRINGSIZE - 1] = '\0'; /* enforce */
|
||||
+
|
||||
+ /* perhaps someone should put something here to check if password
|
||||
+ is really long and syslog() a message denoting buffer attacks? */
|
||||
+
|
||||
+ if (!(pwp = PWOpen(path, "r")))
|
||||
+ {
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ error = FascistLook(pwp, pwtrunced);
|
||||
+ if (error != NULL)
|
||||
+ {
|
||||
+ strncpy(errstr, error, errstr_len);
|
||||
+ errstr[errstr_len - 1] = '\0';
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ errstr[0] = '\0';
|
||||
+ }
|
||||
+
|
||||
+ /* sure seems like we should close the database, since we're only likely to check one password */
|
||||
+ PWClose(pwp);
|
||||
+ pwp = (PWDICT *)0;
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
const char *
|
||||
GetDefaultCracklibDict()
|
||||
{
|
||||
--- a/lib/crack.h
|
||||
+++ b/lib/crack.h
|
||||
@@ -22,6 +22,15 @@
|
||||
extern const char *FascistCheckUser(const char *pw, const char *dictpath,
|
||||
const char *user, const char *gecos);
|
||||
|
||||
+/* This Debian specific method is a work-around for Debian #682735. Please
|
||||
+ do not rely on it being available in future verisons of cracklib2.
|
||||
+ Returns 1 (true) for success and 0 (false) in case an error occurred
|
||||
+ opening or reading the dictionary. In the later case, please check
|
||||
+ errno. */
|
||||
+extern int __DEBIAN_SPECIFIC__SafeFascistCheck(const char *pw,
|
||||
+ const char *dictpath, char *errmsg,
|
||||
+ size_t errmsg_len);
|
||||
+
|
||||
/* This function returns the compiled in value for DEFAULT_CRACKLIB_DICT.
|
||||
*/
|
||||
extern const char *GetDefaultCracklibDict(void);
|
||||
--- a/lib/packlib.c
|
||||
+++ b/lib/packlib.c
|
||||
@@ -16,6 +16,7 @@
|
||||
#ifdef HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
+#include <errno.h>
|
||||
#include "packer.h"
|
||||
|
||||
static const char vers_id[] = "packlib.c : v2.3p2 Alec Muffett 18 May 1993";
|
||||
@@ -157,6 +158,7 @@
|
||||
if (!fread((char *) &pdesc.header, sizeof(pdesc.header), 1, ifp))
|
||||
{
|
||||
fprintf(stderr, "%s: error reading header\n", prefix);
|
||||
+ errno = 0;
|
||||
|
||||
pdesc.header.pih_magic = 0;
|
||||
fclose(ifp);
|
||||
@@ -180,6 +182,7 @@
|
||||
if (!fread((char *) &pdesc64.header, sizeof(pdesc64.header), 1, ifp))
|
||||
{
|
||||
fprintf(stderr, "%s: error reading header\n", prefix);
|
||||
+ errno = 0;
|
||||
|
||||
pdesc.header.pih_magic = 0;
|
||||
fclose(ifp);
|
||||
@@ -199,6 +202,7 @@
|
||||
{
|
||||
/* nope, not "64-bit" after all */
|
||||
fprintf(stderr, "%s: error reading header\n", prefix);
|
||||
+ errno = 0;
|
||||
|
||||
pdesc.header.pih_magic = 0;
|
||||
fclose(ifp);
|
||||
@@ -225,6 +229,7 @@
|
||||
if (pdesc.header.pih_magic != PIH_MAGIC)
|
||||
{
|
||||
fprintf(stderr, "%s: magic mismatch\n", prefix);
|
||||
+ errno = 0;
|
||||
|
||||
pdesc.header.pih_magic = 0;
|
||||
fclose(ifp);
|
||||
@@ -245,6 +250,7 @@
|
||||
if (pdesc.header.pih_numwords < 1)
|
||||
{
|
||||
fprintf(stderr, "%s: invalid word count\n", prefix);
|
||||
+ errno = 0;
|
||||
|
||||
pdesc.header.pih_magic = 0;
|
||||
fclose(ifp);
|
||||
@@ -264,6 +270,7 @@
|
||||
if (pdesc.header.pih_blocklen != NUMWORDS)
|
||||
{
|
||||
fprintf(stderr, "%s: size mismatch\n", prefix);
|
||||
+ errno = 0;
|
||||
|
||||
pdesc.header.pih_magic = 0;
|
||||
fclose(ifp);
|
||||
--- a/python/_cracklib.c
|
||||
+++ b/python/_cracklib.c
|
||||
@@ -42,6 +42,7 @@
|
||||
#ifdef HAVE_LIBINTL_H
|
||||
#include <libintl.h>
|
||||
#endif
|
||||
+#include <errno.h>
|
||||
|
||||
#ifdef HAVE_PTHREAD_H
|
||||
static pthread_mutex_t cracklib_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
@@ -74,7 +75,8 @@
|
||||
{
|
||||
char *candidate, *dict;
|
||||
char *defaultdict = NULL;
|
||||
- const char *result;
|
||||
+ int result;
|
||||
+ char errmsg[255];
|
||||
struct stat st;
|
||||
char *keywords[] = {"pw", "dictpath", NULL};
|
||||
char *dictfile;
|
||||
@@ -148,7 +150,8 @@
|
||||
#endif
|
||||
|
||||
LOCK();
|
||||
- result = FascistCheck(candidate, dict ? dict : defaultdict);
|
||||
+ result = __DEBIAN_SPECIFIC__SafeFascistCheck(candidate,
|
||||
+ dict ? dict : defaultdict, errmsg, sizeof(errmsg));
|
||||
UNLOCK();
|
||||
|
||||
if (defaultdict != NULL)
|
||||
@@ -156,10 +159,25 @@
|
||||
free(defaultdict);
|
||||
}
|
||||
|
||||
- if (result != NULL)
|
||||
+ if (result)
|
||||
{
|
||||
- PyErr_SetString(PyExc_ValueError, result);
|
||||
- return NULL;
|
||||
+ if ((errmsg != NULL) && (strlen(errmsg) > 0))
|
||||
+ {
|
||||
+ PyErr_SetString(PyExc_ValueError, errmsg);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ }
|
||||
+ else {
|
||||
+ if (errno == 0)
|
||||
+ {
|
||||
+ PyErr_SetString(PyExc_RuntimeError, "Unable to read cracklib dictionary.");
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ PyErr_SetFromErrnoWithFilename(PyExc_ValueError, "/var/cache/cracklib_dict.*");
|
||||
+ return NULL;
|
||||
+ }
|
||||
}
|
||||
return Py_BuildValue("s", candidate);
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
Description: The input word is guaranteed to be at most STRINGSIZE-1 in length.
|
||||
One of the mangle operations involves duplicating the input word, resulting in
|
||||
a string twice the length to be accommodated by both area variables.
|
||||
Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=835386
|
||||
Author: Howard Guo <hguo@suse.com>
|
||||
Last-Update: 2016-08-17
|
||||
|
||||
diff -rupN 3/lib/rules.c 3-patched/lib/rules.c
|
||||
--- 3/lib/rules.c 2016-08-16 14:16:24.033261876 +0200
|
||||
+++ 3-patched/lib/rules.c 2016-08-17 13:57:14.485782894 +0200
|
||||
@@ -434,9 +434,8 @@ Mangle(input, control) /* returns a poi
|
||||
{
|
||||
int limit;
|
||||
register char *ptr;
|
||||
- static char area[STRINGSIZE];
|
||||
- char area2[STRINGSIZE];
|
||||
- area[0] = '\0';
|
||||
+ static char area[STRINGSIZE * 2] = {0};
|
||||
+ char area2[STRINGSIZE * 2] = {0};
|
||||
strcpy(area, input);
|
||||
|
||||
for (ptr = control; *ptr; ptr++)
|
|
@ -1,5 +0,0 @@
|
|||
install-debian-python-modules.patch
|
||||
libcrack2-error-safer-check-variant.patch
|
||||
improve_test_737040.patch
|
||||
CVE-2016-6318.patch
|
||||
overflow-processing-long-words.patch
|
|
@ -1 +1 @@
|
|||
3.0 (quilt)
|
||||
3.0 (native)
|
||||
|
|
Loading…
Reference in New Issue