lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20180125025349.31494-3-krisman@collabora.co.uk>
Date:   Thu, 25 Jan 2018 00:53:38 -0200
From:   Gabriel Krisman Bertazi <krisman@...labora.co.uk>
To:     tytso@....edu, david@...morbit.com, olaf@....com,
        viro@...iv.linux.org.uk
Cc:     linux-ext4@...r.kernel.org, linux-fsdevel@...r.kernel.org,
        alvaro.soliverez@...labora.co.uk, kernel@...ts.collabora.co.uk,
        Gabriel Krisman Bertazi <krisman@...labora.co.uk>
Subject: [PATCH RFC v2 02/13] charsets: ascii: Wrap ascii functions to charsets library

This allows filesystems to always use the charsets interfaces, even when
not caring about encoding.

Changes since RFC v1:
  - Include length parameter for second string on comparison functions.
  - Cast length type to size_t.

Signed-off-by: Gabriel Krisman Bertazi <krisman@...labora.co.uk>
---
 lib/charsets/Makefile |   2 +
 lib/charsets/ascii.c  | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 104 insertions(+)
 create mode 100644 lib/charsets/ascii.c

diff --git a/lib/charsets/Makefile b/lib/charsets/Makefile
index 01ff9fd09f98..2184e7ff25de 100644
--- a/lib/charsets/Makefile
+++ b/lib/charsets/Makefile
@@ -1,3 +1,5 @@
 charsets-y += core.o
 
 obj-$(CONFIG_CHARSETS) += charsets.o
+
+obj-$(CONFIG_CHARSETS) += ascii.o
diff --git a/lib/charsets/ascii.c b/lib/charsets/ascii.c
new file mode 100644
index 000000000000..42f3ec00e41c
--- /dev/null
+++ b/lib/charsets/ascii.c
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2017 Collabora Ltd.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+#include <linux/types.h>
+#include <linux/module.h>
+#include <linux/charsets.h>
+#include <linux/string.h>
+#include <linux/ctype.h>
+#include <linux/parser.h>
+
+static struct charset_info ascii_info;
+
+int ascii_strncmp(const struct charset *charset, const char *str1,
+		  size_t len1, const char *str2, size_t len2)
+{
+	size_t len = (len1 < len2)? len1:len2;
+
+	return strncmp(str1, str2, len);
+}
+
+int ascii_strncasecmp(const struct charset *charset, const char *str1,
+		      size_t len1, const char *str2, size_t len2)
+{
+	size_t len = (len1 < len2)? len1:len2;
+
+	return strncasecmp(str1, str2, len);
+}
+
+int ascii_normalize(const struct charset *charset, const char *str,
+		    int len, char **normalization)
+{
+	*normalization = kstrdup(str, GFP_NOFS);
+	return (*normalization) ? len : -ENOMEM;
+}
+
+int ascii_casefold(const struct charset *charset, const char *str,
+		   int len, char **folded_str)
+{
+	int i;
+	char *fold;
+
+	fold = kstrdup(str, GFP_NOFS);
+	if (!fold)
+		return -ENOMEM;
+
+	for (i = 0; i < len; i++)
+		fold[i] = tolower(fold[i]);
+
+	*folded_str = fold;
+	return len;
+}
+
+static const struct charset_ops ascii_ops = {
+	.strncmp = ascii_strncmp,
+	.strncasecmp = ascii_strncasecmp,
+	.casefold = ascii_casefold,
+	.normalize = ascii_normalize,
+};
+
+static struct charset ascii_charset = {
+	.version = 0,
+	.info = &ascii_info,
+	.ops = &ascii_ops
+};
+
+static struct charset *ascii_load_charset(void *pargs)
+{
+	return &ascii_charset;
+}
+
+static struct charset_info ascii_info = {
+	.name = "ascii",
+	.match_token = "ascii",
+	.load_charset = ascii_load_charset,
+};
+
+static int __init init_ascii(void)
+{
+	charset_register(&ascii_info);
+	return 0;
+}
+
+static void __exit exit_ascii(void)
+{
+}
+
+module_init(init_ascii);
+module_exit(exit_ascii);
+MODULE_AUTHOR("Gabriel Krisman Bertazi");
+MODULE_DESCRIPTION("ASCII charset for filesystems");
+MODULE_LICENSE("GPL");
+
-- 
2.15.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ